2017-04-25 58 views
0

的虚拟属性我有以下两个协会:导轨的has_many协会:获得相关物体

# 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"。该表格与其关联的authornested_fields_for,因此表格也在更新关联的author

之前,我打电话的books_controllerupdate,将更新book及其相关author,我的foo_virtual_attr书的虚拟属性设置为true

现在时update发生了:我想是author(关联到book一),以能够抓住所设定的相关book内的虚拟属性。

  • 换句话说,在author应该能够说:“嘿,我正被关联到我,在这里这个特定book更新是针对foo_virtual_attribute其虚拟属性的值“。

我不想author要查询的记录的book数据库,因为那么author记录将不知道这本书的虚拟属性。我可以通过挖掘params hash来获取虚拟属性,但这并不理想。我想,author必须知道其关联的books中的哪一个导致其更新。

希望这是有道理的。我不知道这是可能的...

+0

尝试从作者模型保存之前的'self.book.virtual_attr' – Tachyons

+0

@Tachyons但'作者'has_many书籍。它会如何知道抓住适当的书? – Neil

+0

你好,你为什么'book'接受'author'属性?你有没有考虑将'book'传递给将更新作者的方法 – Bohdan

回答

0

我知道这是不是一个回答你的问题,但我不能因缺乏信​​誉的,这就是为什么张贴作为一个答案张贴评论质疑

什么如果您在Authorlast_updated_book中维护虚拟属性。然后你可以查询author.last_updated_book.foo_virtual_attribute