これがSOに関する私の最初の質問です。W00t!
このrailscastのように、accepts_nested_attributes_forの質問と、質問モデルaccepts_nested_attributes_forの回答を受け入れる調査モデルとフォームを作成できます。
ユーザーがサインインしている場合は、回答をuser_idに関連付けることができます。ただし、ゲストもこのフォームに記入できるようにしたいと思います。これは、参加への障壁を下げるための優れた方法です。
ゲストユーザーが自分の名前をフォームに追加して、他のユーザーがまだアカウントを作成していないゲストを区別できるようにしたいと思います。そのために、回答モデルにguest_nameフィールドを作成しました。
問題:新しい回答を作成した後でフォームに名前を追加した場合、名前を回答に関連付けるにはどうすればよいですか?
Surveys_controller.rb内で、現在、という変数を作成し、@responding_user_id
それをサインインしたユーザーのIDに設定するか、誰もサインインしていない場合は0に設定しています。
@responding_user_id = (current_user ? current_user.id : 0)
内部answer.html.erb
で、これを実行して、サインインしたユーザーのIDをユーザーの回答に関連付けることができます。
<%= f.hidden_field :user_id, :value => @responding_user_id %>
調査では、ユーザーには複数の質問が表示され、_question_fields.html.erbという部分から[回答の追加]リンクをクリックして、任意の質問に1つ以上の回答を追加できます。
<%= f.fields_for :answers do |builder| %>
<%= render 'answer_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add a New Response", f, :answers %>
回答を追加する前に名前を入力し、jQueryを使用して非表示のuser_idフィールドを変更するように強制することもできますが、これは最適なユーザーエクスペリエンスではありません。
私が問題を抱えているのは、回答の非表示のuser_idフィールドにゲスト名を割り当てることだけです。これが難しい理由は、ユーザーが[回答の追加]をクリックしたときに非表示フィールドのHTMLが生成され、その時点でまだゲスト名を入力していない可能性があるためです。
たぶん、これを行う唯一の方法は、上記のようにjQueryを使用することですか?
ありがとう!!