gpt4 book ai didi

ruby-on-rails - Rails 嵌套表单 has_many :through, 如何编辑连接模型的属性?

转载 作者:行者123 更新时间:2023-12-03 04:48:11 24 4
gpt4 key购买 nike

使用accepts_nested_attributes_for时如何编辑连接模型的属性?

我有 3 个模型:由链接器加入的主题和文章

class Topic < ActiveRecord::Base
has_many :linkers
has_many :articles, :through => :linkers, :foreign_key => :article_id
accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
has_many :linkers
has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
#this is the join model, has extra attributes like "relevance"
belongs_to :topic
belongs_to :article
end

因此,当我在主题 Controller 的"new"操作中构建文章时......

@topic.articles.build

...并在topics/new.html.erb中制作嵌套表单...

<% form_for(@topic) do |topic_form| %>
...fields...
<% topic_form.fields_for :articles do |article_form| %>
...fields...

...Rails 自动创建链接器,这很棒。现在回答我的问题:我的链接器模型还具有我希望能够通过“新主题”表单更改的属性。但是 Rails 自动创建的链接器除了 topic_id 和article_id 之外的所有属性都具有 nil 值。如何将其他链接器属性的字段放入“新主题”表单中,这样它们就不会为零?

最佳答案

找到答案了。诀窍是:

@topic.linkers.build.build_article

这将构建链接器,然后为每个链接器构建文章。所以,在模型中:
topic.rb 需要 accepts_nested_attributes_for :linkers
linker.rb 需要 accepts_nested_attributes_for :article

然后采用以下形式:

<%= form_for(@topic) do |topic_form| %>
...fields...
<%= topic_form.fields_for :linkers do |linker_form| %>
...linker fields...
<%= linker_form.fields_for :article do |article_form| %>
...article fields...

关于ruby-on-rails - Rails 嵌套表单 has_many :through, 如何编辑连接模型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com