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:
但是当它第一次运行时,我得到一个错误。如果我重新加载页面,则在上一次运行时设置了国家(即使出现错误),并且一切正常。
还检查我在第二篇文章中公开的解决方案。