0

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

belongs_to :user
belongs_to :publisher

伟大的。用户通过 has many :through 与发布者签约

has_many :contracts
has_many :publishers, through: :contracts

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

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

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

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

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

4

1 回答 1

0

您可以使用嵌套模型表单和嵌套属性来做到这一点。您有两个关于该主题的 RailsCasts:第 1部分和第 2 部分,您可以在其中看到它是如何工作的。也是关于主题的强制性文件

如果您选择这种方式,这里是最新 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。

于 2013-05-17T11:01:10.427 回答