【问题标题】:Rails form_for loop with nested resources带有嵌套资源的 Rails form_for 循环
【发布时间】:2011-07-14 02:23:04
【问题描述】:

我有三个资源:工作、问题和答案。
这些关系是: 约伯有很多问题;问题有很多答案。

我在 Jobs 表单视图中创建了一个嵌套表单, 这包括创造就业机会和问题。这些都将在管理墙后面,但我希望用户通过答案表单视图上的表单来回答问题(而不是在墙后面)。

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

由于这是一个循环并且会有超过 1 个答案字段,我希望问题能够动态呈现为答案表单标签。这将反映路径,因此 jobs/1/questions/1/answers/new(EDIT: this should be 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 %>

如果您需要更多信息,请告诉我,感谢您的帮助!

【问题讨论】:

  • jobs/1/questions/1/answers/new 看起来它会从单个工作中创建单个问题的答案。或者您是否尝试在创建答案时显示所有问题?
  • 啊,你是对的,我试图在创建答案时显示该工作的所有问题。所以它应该是 /jobs/1/questions/answers/new 或者更确切地说是 jobs/1/answers/new ?

标签: ruby-on-rails loops form-for nested-resources


【解决方案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

此解决方案正在保存我的答案,但现在我需要在另一个视图中使用该部分来实现我尝试使用管理员/用户操作的功能。

如果您有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2011-01-03
    • 2013-01-14
    • 2017-01-10
    • 2011-01-16
    相关资源
    最近更新 更多