Nic*_*ilt 4 ruby ruby-on-rails
我有一个带有状态列的用户模型.而不是像这样每次进行字符串比较
user.status == 'verified'
Run Code Online (Sandbox Code Playgroud)
我虽然应该这样做
user.status.verified?
Run Code Online (Sandbox Code Playgroud)
所以我添加了以下代码
def status
ActiveSupport::StringInquirer.new(self.status)
end
Run Code Online (Sandbox Code Playgroud)
但是现在我的堆栈级别太深了,这是可以理解的.我该如何解决?
我正在使用Rails 3.2.
joa*_*lho 17
你的问题是你在方法status内部调用status,这会导致无限递归问题.
这里的大多数答案都集中在使用ActiveSupport :: StringInquirer初始化程序,如下所示:
def status
return unless self['status']
ActiveSupport::StringInquirer.new(self['status'])
end
Run Code Online (Sandbox Code Playgroud)
但你不需要它.ActiveSupport 为所有字符串添加查询方法,因此您可以这样做:
def status
self['status'].try(:inquiry)
end
Run Code Online (Sandbox Code Playgroud)
这与使用read_attribute相同:
def status
read_attribute(:status).try(:inquiry)
end
Run Code Online (Sandbox Code Playgroud)
或者你可以打电话给超级:
def status
super.try(:inquiry)
end
Run Code Online (Sandbox Code Playgroud)