我有三个资源:工作,问题和答案 关系是:工作有很多问题;问题有很多答案。
我在Jobs表单视图上创建了一个嵌套表单, 其中包括创造就业和问题。这些都将落后于管理墙,但我希望用户通过答案表单视图(不在墙后)的表单回答问题。
我面临的问题是我想为答案表单字段创建一个循环。
由于这是一个循环,并且将有多个答案字段,我希望问题能够动态呈现为答案形式标签。这将反映路径,所以 jobs / 1 / questions / 1 / answers / new (编辑:这应该是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)
所以我想出了如何使用它并使用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
最后,我在模型中的关联需要包括
accepts_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
此解决方案正在保存我的答案,但现在我需要在另一个视图中使用该部分来实现我尝试使用管理员/用户操作的功能。
如果您有任何疑问,请与我们联系。