Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby rails提交复选框的附加参数以创建操作_Ruby_Ruby On Rails 3_Forms_Model_Rails Activerecord - Fatal编程技术网

Ruby 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对象的列

我创建了一个新的rails项目并生成了一些脚手架

对于这个问题,我将讨论两个模型/实体/类:

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