9

我搜索并尝试了很多,但我无法按照我的意愿完成它..所以这是我的问题。

class Moving < ActiveRecord::Base
  has_many :movingresources, :dependent => :destroy
  has_many :resources, :through => :movingresources
end

class Movingresource < ActiveRecord::Base
  belongs_to :moving
  belongs_to :resource
end

class Resource < ActiveRecord::Base
  has_many :movingresources
  has_many :movings, :through => :movingresources
end

Movingresources包含其他字段,例如quantity. 我们正在研究“bill”的观点。感谢 formtastic 通过编写来简化整个关系

<%= form.input :workers, :as => :check_boxes %>

我得到了一个非常好的复选框列表。但到目前为止我还没有发现:我如何使用来自“movingresource”的附加字段,下一个或在每个复选框下我想要的来自该模型的字段?

我看到了不同的方法,主要是手动循环遍历对象数组并创建适当的表单,在 form.inputs 部分中使用 :for 或不使用。但是这些解决方案都不是干净的(例如,适用于编辑视图但不适用于新的,因为所需的对象没有构建或生成并且生成它们会导致混乱)。

我想知道你的解决方案!

4

3 回答 3

8

好吧,我错过了accepts_nested_attributes_for 的革命,这就解释了为什么它没有真正起作用。

这让我更进一步,但我认为在某个地方我的复杂关系仍然会有些复杂^_^

class Moving < ActiveRecord::Base
    has_many :movingworkers, :dependent => :destroy
    has_many :workers, :through => :movingworkers
    accepts_nested_attributes_for :movingworkers
end


<% form.inputs :for => :movingworkers do |movingworker| %>
    <%= movingworker.inputs :worker, :quantity %>
<% end %>
于 2010-02-07T08:01:04.873 回答
4

Formtastic 的 :label_method 选项可能会有所帮助。例如

<%= form.input :movingworkers, :label_method => :worker %>

或者

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
于 2010-05-14T04:27:02.293 回答
1

如果新视图中不存在这些字段,您可以测试它是否是新的(new_record?)并显示一组不同的字段(如果您包装成部分输入可能是一种非常干净的方法)。

于 2010-02-03T22:19:15.337 回答