我创建了一个新的rails项目并生成了一些脚手架。
对于这个问题,我将讨论两个模型/实体/类:
Model_A
Model_B
我正在谈论rails项目的全新设置,并在使用scaffold时自动生成代码。
Model_A
与Model_B
之间的关系为:Model_A
有Model_B
个,Model_B
属于Model_A
我想在new.html.erb
的{{1}}中修改新表单。在浏览器中调用Model_A
时,它会向我显示表单。我更新了表单,因此它显示了我之前创建的每个/Model_As
对象的列表。每一行都包含Model_B
,这是我的问题:
当我致电check_box
时,我想创建一个/Model_As
的新对象。 Model_A
有很多Model_A
所以检查一些列出的Model_B
对象会很好,当我按下提交时,将创建Model_B
对象并引用已检查的{{1}对象。听起来不是那么棘手,但我无法解决它。
如何修改Model_A
控制器?我必须添加路线吗?我的表单代码看起来如何?
我知道Model_B
Model_A
,但没有运气。
以太我确实得到了必要的form_helper
(检查对象的id数组)但是没有创建check_box_tag
对象。或者对象正在创建,但不提交ID。
我认为对于经验丰富的ruby / rails开发人员来说这不是问题。我是这个人的新手。
谢谢!
答案 0 :(得分:0)
您必须主要在两个文件中进行更改。
controllers/model_as_controller.rb
- new
操作
def new
@model_a = Model_A.new
@model_bs = Model_B.all
end
views/model_as/new.html.erb
- 以新的@model_a
<%= form_for ... %>
...
<%= hidden_field_tag :model_bs %>
<% @model_bs.each do |model_b| %>
<%= check_box_tag "model_bs[]", model_b.id %>
<%= label_tag("model_b_#{model_b.id}", model_b.name) %>
<% end %>
...
<% end %>
controllers/model_as_controller.rb
- create
行动。
在提交new.html.erb
上的表单后,应用程序将路由到此创建操作。
已检查的model_bs列表将作为由逗号分隔的Model_B对象的ID字符串。
格式为 - &#34; 1,4,7&#34;。所以你编写以下代码将它们提取到一个id数组
def create
model_bs = Model_B.find(params[:model_bs])
... # the code to create the @model_a object and save it
...
@model_a.model_bs << model_bs # This will set the model_a id in all the model_b objects
@model_a.save!
... #code to redirect on success or render 'new' on failure
end
确保Model_bs表格中有一个字段model_a_id
,并在适当的模型中写入has_many :model_bs
和belongs_to :model_a
行。