の仮想属性を取得:Railsのhas_manyの関連付け:私は、次の2つの関連付けを持って、関連するオブジェクト
# models
class Author < ApplicationRecord
has_many :books
end
class Book < ApplicationRecord
belongs_to :author
accepts_nested_attributes_for :author, allow_destroy: true
attr_accessor :foo_virtual_attr
end
今、私はセットアップでいくつかのレコード
author = Author.create(name: "John")
author.books.build(title: "book_1").save
author.books.build(title: "book_2").save
author.books.build(title: "book_3").save
を移入、ここでの状況は次のとおりです。
具体的には、book
のbook
レコードをtitle = "book_1"
と更新するフォームがあります。そのフォームはnested_fields_for
の対応するauthor
を持っているので、フォームは関連するauthor
も更新しています。
私はbook
を更新しauthor
それに関連するだろうbooks_controller
、中update
を呼び出す前に、私はtrue
にfoo_virtual_attr
の本の仮想属性を設定します。今
そのupdate
が起こる:私はしたいauthor
(book
に関連付けられている1)が関連付けられているbook
内に設定された仮想属性をつかむことができるようにということ。言い換えれば
- 、
author
は言うことができる必要があります:「ねえ、私はで私に関連して、ここでfoo_virtual_attribute
のその仮想属性の値である。この特定のbook
を更新しています"
私はその後author
記録は本の仮想属性について知ることができませんので、author
レコードがbook
のためのデータベースを照会する必要はありません。おそらくparamsハッシュを掘り下げて仮想属性を取得することはできますが、それは理想的ではありません。私はauthor
が、それに関連するbooks
のどれが更新されているのかを知る方法がなければならないと想像します。
これはうまくいけばうまくいきます。私はそれがあなたの質問への答えではありません知っている
著者モデル – Tachyons
@Tachyonsが、著者のhas_many本を保存する前に 'self.book.virtual_attr'を試してみてください。適切な本を手に入れる方法をどのように知っていますか? – Neil
こんにちは、 'book'が' author'の属性を受け入れるのはなぜですか?投稿者を更新するメソッドに 'book'を渡すことを考えましたか? – Bohdan