gpt4 book ai didi

ruby-on-rails - 是否可以在 Rails 模型中自动返回虚拟属性?

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:08 25 4
gpt4 key购买 nike

给定:

class Foo
has_one :bar

def bar_name
bar.name
end
end

class Bar
belongs_to :foo
end

在控制台或 View 中,我可以 @foo.bar_name得到'baz' .

我知道我可以 @foo.as_json(methods: :bar_name)得到{"id"=>"abc123", "bar_name"=>"baz"} .

我也可以对属性进行非规范化并使其成为非虚拟的,但在这种情况下我宁愿不这样做。

是否可以自动返回包含虚拟属性的模型?

#<Foo id: "abc123", bar_name: "baz">

我想这样做是因为我正在构建一个带有嵌套模型集合的大型对象,并且 as_json电话从我这里抽象出来。

最佳答案

不是 100% 确定我理解您的问题是否与 as_json 有关但如果是这样,这将起作用

class Foo
has_one :bar

def bar_name
bar.name
end
def as_json(options={})
super(options.merge!(methods: :bar_name))
end
end

现在调用@foo.as_json默认情况下将包括 bar_name就像您的明确示例一样。

Ugly 不推荐,但您可以更改 foo 的检查,例如#<Foo id: "abc123", bar_name: "baz">如下

class Foo
def inspect
base_string = "#<#{self.class.name}:#{self.object_id} "
fields = self.attributes.map {|k,v| "#{k}: #{v.inspect}"}
fields << "bar_name: #{self.bar_name.inspect}"
base_string << fields.join(", ") << ">"
end
end

然后“检查符号”会显示该信息,但我仍然不清楚这是否是您的意图,如果是的话,您为什么想要这个。

关于ruby-on-rails - 是否可以在 Rails 模型中自动返回虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43873727/

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