【问题标题】:Using fields from an association (has_many) model with formtastic in rails在rails中使用带有formtastic的关联(has_many)模型中的字段
【发布时间】:2011-01-12 19:47:11
【问题描述】:

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

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 或不使用。但是这些解决方案都不是干净的(例如,适用于编辑视图,但不适用于新视图,因为未构建或生成所需的对象并且生成它们会导致混乱)。

我想知道你的解决方案!

【问题讨论】:

    标签: ruby-on-rails has-many-through formtastic


    【解决方案1】:

    好吧,我错过了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 %>
    

    【讨论】:

    • 请注意,实际的底层模型可以通过表单构建器直接访问,因此:movingworker.object。请参阅 action_view/helpers/form_helper.rb 中的第 1244 行:attr_accessor :object_name, :object, :options
    • 你是对的。很多事情都发生了变化,我学到了很多新东西,这对我来说很明显,但应该提及。
    【解决方案2】:

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

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

    <%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢,你是对的。但由于我使用 Rails,我习惯了简单,因此我要求其他解决方案来挑选我最喜欢的。而且我也认为这可能对其他人有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多