0

Jobs、Q&A の 3 つのリソースがあります。
関係は次のとおりです。ジョブには多くの質問があります。質問には多くの回答があります。

ジョブ フォーム ビューでネストされたフォームを作成しました。これには、ジョブと質問の作成が含まれます。これらはどちらも管理者の壁の後ろにありますが、ユーザーは回答フォームビューのフォームから質問に答えてもらいたいです (壁の後ろではありません)。

私が直面している問題は、回答フォーム フィールドのループを作成したいということです。

これはループであり、複数の回答フィールドがあるため、質問を回答フォームのラベルとして動的にレンダリングする必要があります。これはパスを反映しているため、jobs/1/questions/1/answers/new (編集: これは である必要がありますjobs/1/answers/new) は 1 のすべての質問を表示しjob_idます。

どうすればこれを行うことができますか?私は回答コントローラーでこのような新しいアクションを使用することを考えていました(これは非常に間違っていると確信しています):

def new
  @answer = Answer.new
  10.times do
     @job = Job.find(params[:job_id])
     @question = @job.questions.find(params[:question_id])
     @answer = @question.answers.build(params[:answer])
  end
end

そして、ここに私の現在の回答フォームがあります:

<%= form_for(@answer, :url => job_question_answers_path(@job, @question)) do |f| %>
   <% f.fields_for :answers do |builder| %>
        <%= builder.label @question.question %>
        <%= builder.text_area :answer, :rows => 10 %>
    <% end %>

<%= f.submit "Create" %>
<% end %>

さらに情報が必要な場合はお知らせください。ご協力ありがとうございます。

4

1 に答える 1

1

だから私はこれを機能させる方法を考え出し、Railscasts エピソードを使用してそれを行いました: http://railscasts.com/episodes/196-nested-model-form-part-1

最初からこの修正を認識していましたが、アプリの機能は、管理者が (壁の後ろで) ジョブと質問を作成し、ユーザーにそれぞれの質問に回答させることであるため、使用を控えました。仕事と質問フォームの下に回答フォームをネストすると、この管理者/ユーザー機能を作成できなくなることがわかりました (これが私の次の偉業です)。

私は基本的に、ジョブ/新しいアクションの質問フォームの下に回答フォームをネストしました。次のようになります。

<%= form_for(@job) do |f| %>
 <%= f.label :name %><br />
 <%= f.text_field :name %>
  <%= f.fields_for :questions do |builder| %>
   <%= render 'question_fields', :f => builder %>
  <% end %>
 <%= f.submit %>
<% end %>

質問の部分は次のとおりです。

<%= f.label :question, "Question" %>
 <%= f.text_area :question, :rows => 10 %>
 <%= f.check_box :_destroy %>
 <%= f.label :_destroy, "Remove Question" %>

  <%= f.fields_for :answers do |builder| %>
   <%= render 'partials/answer_fields', :f => builder %>
  <% end %>

そして、答えの一部は次のとおりです。

 <%= f.label "Answer" %>
 <%= f.text_area :answer, :rows => 10 %>
 <%= f.hidden_field :question_id, :value => @question %>
 <%= f.hidden_field :job_id, :value => @job.id %>

Jobs#new メソッドを変更する必要がありました。

def new
 @job = Job.new
 10.times do
   question = @job.questions.build 
   1.times { question.answers.build }
 end
respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @job }
end
end

最後に、含める必要があるモデルの関連付け

accept_nested_attributes_for

そのようです:

モデル

class Job < ActiveRecord::Base
 has_many :questions
 has_many :answers

 accepts_nested_attributes_for :questions, :allow_destroy => true
 accepts_nested_attributes_for :answers, :allow_destroy => true
end

class Question < ActiveRecord::Base
  belongs_to :job
  has_many :answers

  accepts_nested_attributes_for :answers 
end

class Answer < ActiveRecord::Base
 belongs_to :job
 belongs_to :question
end

このソリューションは私の回答を保存していますが、管理者/ユーザーのアクションで試みていた機能を実現するために、別のビューでその部分を使用する必要があります。

ご不明な点がございましたら、お知らせください。

于 2011-07-20T05:14:46.833 に答える