2011-07-25 9 views
3

2つのフォームで1つのビューを作成し、両方のフォームを同時に送信することはできますか?1aページから2つのフォームを提出する

ネストされたフォームを使用したくありません。例えば

私が持っている:

Model Survey 
|_question_id 
|_answers_id 

Model Question: 
|_text 

Model Answer 
|_text 

は、ネストされたフォームなしでそれを行うには、それは可能ですか?たとえば、新しい質問(フォーム1)と新しい回答(フォーム2)を作成し、コントローラの作成メソッドで新しい調査を作成し、MANUALLY新しく作成した質問にquestion_idとanswers_idを割り当て、それに応じて答えてください!

おかげ

+0

ビュー内に2つのフォームを作成し、それぞれを別々に送信することができますが、同時にそれらを送信する方法はわかりません。 – rubish

+0

それは不可能なのですか? – Immo

+1

私が言っていることは、あなたが独立した提出物にajaxを使用していて、それが妥当でない場合、フォーム提出の両方の応答を待つことができるということです。私はまだ質問と答えの関連について懐疑的です。 httpの提出では、一度に2つのリクエストを提出するという考えで、私の頭の中を包み込むことはできません。最初のリクエストはクライアントによって無視されることがあります。最初の応答があれば、クライアントは応答することがあります。しかし、何が起こっても、そこには多くの悪臭があります。 – rubish

答えて

7

より良いアプローチは、1つのフォーム送信を経由してすべての3つのモデルを構築するためにaccepts_nested_attributes_forを使用することです。

はそうのようなモデルを設定します。

class Survey < ActiveRecord::Base 
    has_one :question 
    has_many :answers 

    accepts_nested_attributes_for :question, :answers 
end 

class Question < ActiveRecord::Base 
    belongs_to :survey 
end 

class Answer < ActiveRecord::Base 
    belongs_to :survey 
end 

は、その後、あなたがこのようにレールのヘルパーを使用して、フォームを作成することができます:あなたが構築するために必要なフォームをレンダリングしますコントローラのアクションで

<%= form_for @survey do |form| %> 
    <%= form.fields_for :question do |question_form| %> 
    <%= question_form.text_field :question 
    <% end %> 
    <%= form.fields_for :answers do |answer_form| %> 
    <%= question_form.text_field :answer 
    <% end %> 
    <%= form.submit %> 
<% end %> 

このようなメモリ内の新しいレコード:

class SurveyController < ApplicationController 
    def new 
    @survey = Survey.new 
    @survey.build_question 
    @survey.answers.build 
    end 
end 

accepts_nested_attributes_for herehttp://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

+0

ありがとうたくさんの仲間:) – Immo

+0

モデルの1つにhas_oneの代わりにhas_manyがある場合。これに変更が必要ですか? – Immo

+0

私はこの例をhas_manyの回答に変更しました –

関連する問題