我有一個#as_json包括不叫as_json在assoc命令
User(id, name, something_secret, created_at, updated_at)
和
Company(id, name, something_secret, created_at, updated_at)
型號:
class Company
def as_json(options = {})
opts = {
only: [:id, :name]
}.merge(options)
super(opts)
end
end
class User
def as_json(options = {})
opts = {
only: [:id, :name],
includes: [:company]
}.merge(options)
super(opts)
end
end
如果我打電話company.as_json
,那麼一切都很好,我得到:
{
id: 1,
name: "Name"
}
但是,如果我叫user.as_json
,那麼它包括所有的公司的東西
{
id: 1,
name: "Jim",
company: {
id: 1,
name: "Name",
something_secret: "super secret",
created_at: "2016-11-12 13:03:07",
updated_at: "2016-11-12 13:03:07"
}
}
這似乎應該呼籲公司#as_json
,但事實並非如此。爲什麼不呢?我怎樣才能做到這一點?
感謝
我同意,現在看來似乎應該是遞歸的,因爲'to_json'是遞歸調用,但它被認爲是不好的形式來調用或重寫此方法。如果你發現自己經常這樣做,我會看看演示者。 ['draper'](https://github.com/drapergem/draper)gem使其變得簡單,並且表現形式非常模塊化 – engineersmnky