我有一个Mood
模型,其中包含几个播种到数据库的情绪,然后它们永远不会被更改。
所以,我想知道,而不是总是做Mood.find_by(name: 'happy')
,我不能以某种方式将此别名变为像happy
这样的东西,并让它可以在任何我可以获得该模型的地方使用吗? Rails / ActiveRecord是否允许这样做?
答案 0 :(得分:2)
您可以在define_singleton_method
中使用Ruby moods.rb
。我没有加载ActiveRecord,所以只需用实际调用替换puts "Call Mood..."
:
class Mood
@@moods = ['angry', 'calm', 'happy']
@@moods.each { |mood| define_singleton_method(mood.to_sym) { puts "Call Mood.find_by(name: #{mood}) here" } }
end
这是输出:
2.2.1 :003 > load 'moods.rb'
Call Mood.find_by(name: calm) here
Call Mood.find_by(name: angry) here
=> true
答案 1 :(得分:1)
有时为此定义[]
方法。
class Mood < ActiveRecord::Base
def self.[](mood_name)
find_by_name(mood_name)
end
end
然后您可以将其称为Mood[:happy]
。