【问题标题】:2 Forms from seperate controller in 1 view1 个视图中来自单独控制器的 2 个表单
【发布时间】:2011-07-18 01:46:53
【问题描述】:

我有 2 个控制器:models_controllerportfolios_controller

我不想分页填写这些表格,而是想在一个视图中显示所有表格并一次填写所有数据。

这是 2 合 1 表单,我正在努力工作:https://github.com/imjp/models/blob/master/app/views/models/_form.html.erb

根据当前的最佳实践,实现我的目标的最简单方法是什么?


编辑 1: 我找到了一种在 1 个视图中一起显示表单的方法,但有一个问题,如果需要,原始表单中的提交按钮会抛出错误抛出验证错误: undefined method 'model_name' for NilClass:Class

看看上面提供的链接。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    由于 model :has_one 组合,rails 的最佳实践是nested_attributes

    #Model (https://github.com/imjp/models/blob/master/app/models/model.rb)
    class Model < ActiveRecord::Base
    ...
      accepts_nested_attributes_for :portfolio
    ...
    end
    
    
    #View (https://github.com/imjp/models/blob/master/app/views/models/_form.html.erb)
    <% fields_for :portfolio |portfolio_form| %>
      ... 
      <div class="field">
        <%= portfolio_form.label :model_id %><br />
        <%= portfolio_form.number_field :model_id %>
      </div>
      ...
    <% end %>
    

    【讨论】:

    • 不需要对“models_controller.rb”做任何修改,因为当触发#save for model回调时会保存投资组合对象
    • 感谢您添加答案 mikhailov!但是,您提供的答案不起作用:(我收到以下错误:i.imgur.com/M2XR0.png
    • 更新了我的答案 - 传递符号而不是对象。要了解它是如何工作的,请查看 Railscast railscasts.com/episodes/196-nested-model-form-part-1
    • 我浏览了 Railscasts 插曲,但无法让他的代码在我的应用程序中运行。不确定这是否与他使用类似 rails 2.3 或其他东西的事实有关。 3.times { @model.portfolios.build } 对我不起作用.. 它说 undefined method for 'portfolios'
    • 你有“投资组合”,而不是“投资组合”关联。所以请改用@model.build_portfolio
    猜你喜欢
    • 2015-06-26
    • 2015-07-30
    • 1970-01-01
    • 2011-01-13
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多