【问题标题】:Ruby on Rails - add fields from a Model on another Model's formRuby on Rails - 在另一个模型的表单上添加模型的字段
【发布时间】:2014-06-19 00:40:49
【问题描述】:

我有两个型号Contract 和Addendum。合同has_many :addendums和附录belongs_to :contract

创建新合同时,会自动创建一个新的附录,但需要一些额外的元素来创建新的附录。如何在合同的表单上添加字段value,它是附录中的属性,而不是合同中的属性?

【问题讨论】:

    标签: ruby-on-rails forms custom-fields


    【解决方案1】:

    您要查找的是嵌套形式,这在 RoR 中很常见。有关嵌套和复杂表单的更多信息,请访问 section of a Rails Guide for that。我建议查看所有 Rails Guides,它们在学习框架时非常有用。

    对于您的具体问题,请先将您的Contract 模型告诉accept_nested_attributes_for 您的Addendum 模型。

    class Contract < ActiveRecord::Base
      has_many :addendum
      accepts_nested_attributes_for :addendums
    end
    

    接下来,打开你的合约控制器,做两件事。一,在创建新的contract 时创建addendum。二、在contract_params 方法中允许addendums 的嵌套属性(假设您使用的是rails 4)。

    class ContractController < ApplicationController
      def new
        @contract = Contract.new
        @addendum = @contract.addendums.build
      end
    
      protected
        def contract_params
          params.require(:contact).permit(:field1, :field2, addendums_attributes: [:id, :value, :other_field])
        end
    end
    

    最后,在 contracts 表单中添加 forms_for 助手。

    <%= form_for @contract do |f| %>
    
      <!-- contract fields -->
    
      Addendums:
      <ul>
        <%= f.fields_for :addendums do |addendums_form| %>
          <li>
            <%= addendums_form.label :value %>
            <%= addendums_form.text_field :value %>
    
            <!-- Any other addendum attributes -->
    
          </li>
        <% end %>
      </ul>
    <% end %>
    

    有了这个,你应该准备好了!编码愉快!

    【讨论】:

    • 感谢您的回复,它正在工作。但是,在合同的控制器上,我如何访问有关附录属性的参数值?不应该是 params[:addendum][:value] 吗?
    • 使用嵌套参数,只需在您的create 或update 控制器方法中使用@contract.assign_params(contract_params) 来分配contract_params。然后你可以简单地调用@contract.addendum.first.value 来获取你的第一个附录的价值。这就是你要找的东西吗?
    • 哎呀,打印错误。应该是@contract.addendums.first.value。 addendums 应该是复数。对此感到抱歉。
    • 那么,附录是自动创建的?我以为我必须稍后再创作。事实上,在合同的控制器 create 我有 if contract.save createAddendum 和 createAddendum 是我在控制器上创建的一个函数,它将获取参数的值(关于 addendum_form)和基于其他字段计算的其他字段...
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多