我不知道这样做的正确方法是什么,所以我希望得到一些关于如何做到这一点的好建议。 假设您有一个具有多个关系的模型作为belongs_to-statements,例如一本书。一本书有作者(用户)和出版商:
belongs_to :user
belongs_to :publisher
大。用户通过多个:通过
签署给发布者has_many :contracts
has_many :publishers, through: :contracts
发布商模型也是如此。作者和出版商都有很多书。到现在为止还挺好。 现在,您有一个发布商展示视图,您可以在其中呈现图书的部分形式,因为您希望直接从发布商的“展示”视图中添加图书。
现在,您想要提交表单并告知关系,您必须将图书模型与发布者和作者数据一起提供。
现在的问题是,如何做到这一点。将数据合并到本书创建方法中的参数似乎运作良好:found on stackoverflow。
我很擅长使用author_id在表单中创建一个隐藏字段,但没有追踪它,因为它感觉很脏。
这样做的“正确”方法是什么?提前谢谢......
答案 0 :(得分:0)
您可以使用嵌套模型表单和嵌套属性来执行此操作。 您有两个关于主题的RailsCasts:part 1和part 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。