2011-07-14 116 views
0

我有三个资源:作业,问题和答案。
关系是:Job有很多问题;问题有很多答案。Rails的嵌套资源form_for循环

我已在作业窗体视图 上创建了一个嵌套窗体,其中包括创建作业和问题。这些都将落后于管理墙,但我希望用户通过答案表单视图上的表单回答问题(而不是在墙后)。

我面临的问题是我想为答案表单域创建一个循环。

由于这是一个循环,并且会有超过1个答案字段,所以我想让问题动态呈现为答案表单标签。这将是反射通路,以便 工作/ 1 /问题/ 1 /答案/新 的(编辑:这应该是jobs/1/answers/new)将显示出所有的问题都与job_id的1

我如何去做这个?我想使用的答案控制器这样一个新的动作(我敢肯定是非常错误的):

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 %> 

让我知道如果您需要更多信息并感谢您的帮助!

+0

工作/ 1 /问题/ 1/answers /新看起来像它会创建一个单一工作的单个问题的答案。或者你在创建答案时试图显示所有问题? –

+0

嗯,你是对的,我想在创建答案时显示该作业的所有问题。所以它应该是/ jobs/1/questions/answers/new或者是jobs/1/answers/new? – Igrabes

回答

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 %> 

我不得不做出的乔布斯#新变化方法:

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 

模型

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 

该解决方案节省了我的答案,但现在我需要使用:个最后我在包括

accepts_nested_attributes_for

像现在这样需要的模型协会在另一个视图中部分实现了我尝试使用管理员/用户操作的功能。

让我知道如果您有任何问题。