2017-04-25 45 views
0

の仮想属性を取得: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 

を移入、ここでの状況は次のとおりです。

具体的には、bookbookレコードをtitle = "book_1"と更新するフォームがあります。そのフォームはnested_fields_forの対応するauthorを持っているので、フォームは関連するauthorも更新しています。

私はbookを更新しauthorそれに関連するだろうbooks_controller、中updateを呼び出す前に、私はtruefoo_virtual_attrの本の仮想属性を設定します。今

そのupdateが起こる:私はしたいauthorbookに関連付けられている1)が関連付けられているbook内に設定された仮想属性をつかむことができるようにということ。言い換えれば

  • authorは言うことができる必要があります:「ねえ、私はで私に関連して、ここでfoo_virtual_attributeのその仮想属性の値である。この特定のbookを更新しています"

私はその後author記録は本の仮想属性について知ることができませんので、authorレコードがbookのためのデータベースを照会する必要はありません。おそらくparamsハッシュを掘り下げて仮想属性を取得することはできますが、それは理想的ではありません。私はauthorが、それに関連するbooksのどれが更新されているのかを知る方法がなければならないと想像します。

これはうまくいけばうまくいきます。私はそれがあなたの質問への答えではありません知っている

+0

著者モデル – Tachyons

+0

@Tachyonsが、著者のhas_many本を保存する前に 'self.book.virtual_attr'を試してみてください。適切な本を手に入れる方法をどのように知っていますか? – Neil

+0

こんにちは、 'book'が' author'の属性を受け入れるのはなぜですか?投稿者を更新するメソッドに 'book'を渡すことを考えましたか? – Bohdan

答えて

0

...これが可能であるかどうかわからないが、私は原因理由を答えとして、それを掲示するの評判の欠如への質問にコメントを投稿することができません

何仮想属性をAuthor、つまりlast_updated_bookに設定するとその後、あなたはクエリできますauthor.last_updated_book.foo_virtual_attribute