Ruby rails提交复选框的附加参数以创建操作
我创建了一个新的rails项目并生成了一些脚手架 对于这个问题,我将讨论两个模型/实体/类:Ruby rails提交复选框的附加参数以创建操作,ruby,ruby-on-rails-3,forms,model,rails-activerecord,Ruby,Ruby On Rails 3,Forms,Model,Rails Activerecord,我创建了一个新的rails项目并生成了一些脚手架 对于这个问题,我将讨论两个模型/实体/类: Model_A Model_B 我说的是rails项目的新设置,以及在使用scaffold时自动生成的代码 Model_A和Model_B之间的关系是:Model_A有许多Model_Bs和Model_B属于Model_A 我想在Model\u A的New.html.erb中编辑新表单。在浏览器中以的形式调用/Model\u时,它会显示表单。我更新了表单,使其显示我以前创建的每个Model_B对象的列
Model_A
Model_B
我说的是rails项目的新设置,以及在使用scaffold时自动生成的代码
Model_A
和Model_B
之间的关系是:Model_A
有许多Model_B
s和Model_B
属于Model_A
我想在Model\u A
的New.html.erb
中编辑新表单。在浏览器中以的形式调用/Model\u时,它会显示表单。我更新了表单,使其显示我以前创建的每个Model_B
对象的列表。每行都包含一个复选框
,这是我的问题:
当我调用/Model\u As
时,我想创建一个Model\u a
的新对象Model_A
有许多Model_B
,因此最好检查一些列出的Model_B
对象,当我按submit时,将创建Model_A
对象,并引用选中的Model_B
对象。听起来没那么棘手,但我解决不了
如何修改型号A
控制器?我必须添加路线吗?我的表单代码应该是什么样子
我知道复选框标签的表单帮助程序
,但还不走运
我确实获得了必要的参数
(检查对象的ID数组),但是没有创建模型A
对象。或者正在创建对象,但未提交ID
我认为这对于经验丰富的ruby/rails开发人员来说是没有问题的。我对这东西不熟悉
谢谢 您必须在两个文件中进行更改
controllers/model\u as\u controller.rb
-新的操作
def new
@model_a = Model_A.new
@model_bs = Model_B.all
end
views/model\u as/new.html.erb
-以新@model\u 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 %>
确保model_bs表中有一个字段model_a_id
,并且中有许多:model_bs
和属于:model_a
行,这些行是用适当的模型编写的 当你展示源代码时,它真的很有帮助。想象你在做什么比阅读一个演示问题的小例子要困难得多。您好,非常感谢您的回答,但它不起作用。模型_A正在被创建,转发工作正常,但是当我想看到结果时,它是空的。我修改了Model_A的show.html.erb以列出所有@Model_A.练习,但其为空。没有JavaScript就没有办法做到这一点吗?没有Ruby/Rails方法?请尝试编辑的代码。我从视图中删除了所有javascript。现在我在提交表单时得到了“param`model_bs'的预期数组(get String)”(内部服务器错误)。很抱歉,我再次仔细比较了我的代码和你的代码,发现代码中有一些错误。现在一切都像我希望的那样运作。非常感谢你!
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