【问题标题】:Rails adding params from multiple modelsRails 添加来自多个模型的参数
【发布时间】:2013-05-17 19:01:10
【问题描述】:

我不确定这样做的正确方法是什么,所以我希望得到一些关于如何“很好”地做到这一点的建议。 假设您有一个具有多个关系的模型作为 belongs_to-statements,例如一本书。一本书有一个作者(用户)和一个出版商:

belongs_to :user
belongs_to :publisher

太好了。用户通过 has many :through 与发布者签约

has_many :contracts
has_many :publishers, through: :contracts

发布者模型也是如此。作者和出版商都有很多书。到目前为止,一切都很好。 现在您有了一个发布者显示视图,您可以在其中呈现图书的部分表单,因为您想直接从发布者的“显示”视图添加一本书。

现在,您要向关系提交表单和原因,您必须向图书模型提供出版商和作者数据。

现在的问题是,如何做到这一点。在本书的 create 方法中将数据合并到参数中似乎效果很好:found on stackoverflow

我对使用 author_id 在表单中创建一个隐藏字段感到不满,但没有继续,因为不知何故感觉很脏。

这样做的“正确”方法是什么?提前谢谢...

【问题讨论】:

    标签: controller ruby-on-rails-3.2


    【解决方案1】:

    您可以使用嵌套模型表单和嵌套属性来实现。 您有两个关于该主题的 RailsCasts:part 1part 2,您可以在其中看到它是如何工作的。还有mandatory documentation on subject

    如果您选择这种方式,这里是最新 Rails 版本的更新方法版本:

      def link_to_remove_fields(name, f)
        f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", :class => "icon-remove")
      end
    
      def link_to_add_fields(name, f, association)
        new_object = f.object.class.reflect_on_association(association).klass.new
        fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
          render(association.to_s.singularize + "_fields", :f => builder)
        end
        link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
      end
    

    因为截屏版本无法在更高版本的 rails 上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多