别名find_by常用对象的查询

时间:2016-01-17 15:55:46

标签: ruby-on-rails activerecord

我有一个Mood模型,其中包含几个播种到数据库的情绪,然后它们永远不会被更改。

所以,我想知道,而不是总是做Mood.find_by(name: 'happy'),我不能以某种方式将此别名变为像happy这样的东西,并让它可以在任何我可以获得该模型的地方使用吗? Rails / ActiveRecord是否允许这样做?

2 个答案:

答案 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]