ruby-on-rails - 如何在 Rails 中为对象的多个子对象编写表单

标签 ruby-on-rails ruby

假设我有这些类(class)

class Company
  has_many :workers
end

class Worker
  belongs_to :company
end

我想要一个可以修改公司和每个 worker 的页面。我的尝试是这样的:

= form_for @company do |f|
  = f.text_input :name
  -# etc..
  - @company.workers.each do |worker|
    = f.fields_for worker do |fw|
      = f.text_input :name
      = f.text_input :title

但是,工作人员的字段名称如 company[worker][title] 不包含工作人员的标识符,因此所有 title 字段每个 worker 都有相同的名字。

为属于单个对象的多个对象创建表单的正确方法是什么?

最佳答案

正如@max 所指出的,您想使用fields_for。具体来说,您想使用 one-to-many implementation .

这意味着您的模型将需要接受嵌套属性

class Company
  has_many :workers
  accepts_nested_attributes_for :workers
end

并且您的表单将嵌套有一个 fields_for block ,您拥有该 block 但是您使用了错误的 block 参数。而不是 f 你想使用 fw

= form_for @company do |f|
  = f.text_input :name
  -# etc..
  - @company.workers.each do |worker|
    = f.fields_for :workers, worker do |fw|
      = fw.text_input :name
      = fw.text_input :title

关于ruby-on-rails - 如何在 Rails 中为对象的多个子对象编写表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046360/

相关文章:

ruby-on-rails - 将许多环境变量传递给 Unicorn 运行的 Rails 应用程序

mysql - 使用 ruby​​ 访问现有的 MySql 数据库(路径?)

ruby - 在ruby中查找多维数组中每个元素的索引

ruby - 使用模块 bzip2 时出错

java - 使用 Ruby on Rails 比较 Android Market 响应中的签名数据和签名

ruby-on-rails - 如何将项目附加到数组

javascript - 显示Rails中所选类别的子类别,类别和子类别在同一个表中

ruby - 如何在 Shoes 应用程序中启用文本选择、复制和粘贴?

ruby - 纯 ERB/Erubis 中的 block

ruby-on-rails - 从应用程序布局调用 Controller 操作