Ruby on rails Rails设置模型属性(如果为空)
我有一个用户模型,它有一个名为Ruby on rails Rails设置模型属性(如果为空),ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个用户模型,它有一个名为country的属性。此属性由名为methodA的方法设置 在我的代码中的其他地方,我可能会尝试访问用户的country属性,如果methodA从未运行,则该属性可能为空 如果我试图访问用户的country属性且该属性为空,那么我要寻找的是运行methodA 我在我的模型中尝试了类似的东西: def country c = read_attribute(:country).presence if c.blank? methodA else
country
的属性。此属性由名为methodA
的方法设置
在我的代码中的其他地方,我可能会尝试访问用户的country
属性,如果methodA
从未运行,则该属性可能为空
如果我试图访问用户的country
属性且该属性为空,那么我要寻找的是运行methodA
我在我的模型中尝试了类似的东西:
def country
c = read_attribute(:country).presence
if c.blank?
methodA
else
return c
end
end
但是当它第一次运行时,我得到了一个错误。如果我重新加载页面,country
已在上一次运行时设置好(即使出现错误),一切正常
我希望它能在第一次运行时工作,并避免出现错误页面
提前感谢您的帮助您可以拨打
super
def country
super.presence || "do whatever"
end
presence
将检查present?
如果present?
它将返回其接收器;否则,它将返回一个假y值(nil)
请记住,如果可能,您应该设置数据库默认值。您只需调用
super
def country
super.presence || "do whatever"
end
presence
将检查present?
如果present?
它将返回其接收器;否则,它将返回一个假y值(nil)
请记住,如果可能的话,您应该设置一个数据库默认值。我已经通过以下方法实现了我的目标:
class User < ApplicationRecord
after_find :check_country
def check_country
if country.blank?
methodA
end
end
def methodA
...code
end
end
class用户
它确实有效,但我不确定这是否理想。。。因为每次提取用户时都会执行check\u country
。。。即使设置了国家/地区
。
我希望它只在country
为空时运行
有什么想法吗?我通过以下方法实现了我的目标:
class User < ApplicationRecord
after_find :check_country
def check_country
if country.blank?
methodA
end
end
def methodA
...code
end
end
class用户
它确实有效,但我不确定这是否理想。。。因为每次提取用户时都会执行check\u country
。。。即使设置了国家/地区
。
我希望它只在country
为空时运行
有什么想法吗?所以它看起来应该是这样的
super.presence | | methodA
?是的-Ruby将在|
之后评估任何东西,我尝试了它,但仍然得到了与我以前的“解决方案”相同的错误。检查OP:,但当它第一次运行时,我得到一个错误。如果我重新加载页面,国家/地区已设置为上一次运行(即使出现错误),一切正常。
还检查我在第二篇文章中公开的解决方案。因此它应该是这样的super.presence | | methodA
?是的-Ruby将在|
我尝试了它之后对任何内容进行评估,但我仍然得到了与前一次相同的错误“解决方案”。检查OP:但是当它第一次运行时,我得到一个错误。如果我重新加载页面,则在上一次运行时设置了国家(即使出现错误),并且一切正常。
还检查我在第二篇文章中公开的解决方案。