首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails在另一个模型的表单上添加来自模型的字段

Rails在另一个模型的表单上添加来自模型的字段
EN

Stack Overflow用户
提问于 2014-06-19 00:40:49
回答 1查看 5.1K关注 0票数 3

我有两种型号的ContractAddendum。合同has_many :addendums和增编belongs_to :contract

当一个新合同创建时,会自动创建一个新的增编,但是需要一些调整元素来创建新的增编。如何在合同的表单中添加字段value,它是来自增编的属性,而不是来自合同的属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 01:45:31

您要寻找的是一个嵌套表单,它在RoR中非常常见。有关嵌套和复杂表单的更多信息,有一个这方面的铁路指南一节。我建议查看所有的Rails导轨,它们在学习框架时非常有用。

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

代码语言:javascript
复制
class Contract < ActiveRecord::Base
  has_many :addendum
  accepts_nested_attributes_for :addendums
end

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

代码语言:javascript
复制
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

最后,在您的forms_for表单中添加contract助手。

代码语言:javascript
复制
<%= 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 %>

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24297096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档