【发布时间】:2012-08-07 19:37:31
【问题描述】:
我有一个功能可以做到这一点:
def blank_to_negative(value)
value.is_number? ? value : -1
end
如果传递的值不是数字,则将值转换为-1。
我主要为某个模型创建了这个函数,但是在任何某个模型中定义这个函数似乎并不合适,因为这个函数的应用范围显然可以扩展到任何一个特定的模型之外。我几乎肯定会在其他模型中需要此功能,并且可能在视图中。
什么是最“Rails Way”的方式来定义这个函数,然后在任何地方使用它,尤其是在模型中?
我尝试在ApplicationHelper中定义它,但没有成功:
class UserSkill < ActiveRecord::Base
include ApplicationHelper
belongs_to :user
belongs_to :skill
def self.splice_levels(current_proficiency_levels, interest_levels)
Skill.all.reject { |skill| !current_proficiency_levels[skill.id.to_s].is_number? and !interest_levels[skill.id.to_s].is_number? }.collect { |skill| {
:skill_id => skill.id,
:current_proficiency_level => blank_to_negative(current_proficiency_levels[skill.id.to_s]),
:interest_level => blank_to_negative(interest_levels[skill.id.to_s]) }}
end
end
这告诉我
用于#的未定义方法`blank_to_negative'
无论如何,我已经读过you're "never" supposed to do that kind of thing,所以我有点困惑。
【问题讨论】:
-
如果你需要在很多地方使用这个逻辑,我感觉你的设计存在缺陷。
-
好点。你可能是对的。根本原因是我的应用程序中的某些内容可以被用户评为 0-10。如果用户不输入评分,则用户的评分不是未知的,它只是已知为空白,因此我想存储一个 NULL(表示“未知”),而不是存储一个不同的值,我选择了-1。欢迎提出关于更好解决方案的建议(尽管肯定与原始问题无关)。
-
好消息是 nil 和空白字符串在与
to_i一起使用时默认为 0 -
但 0 是合法评级,空白或无效值不应默认为合法评级 0。
-
我会使用 null 来表示空白值。这就是它的用途。无论是因为未知而为空白,还是因为不存在而为空白,还是因为故意为空白而为空白,都只是空白。 Nil/null 是 blank 值的正确概念。
标签: ruby-on-rails