私は次のクラスメソッドを持っていますが、これを行うためのよりきれいな(よりルビー主義の)方法があるかどうか疑問に思いました。
def self.of_users_that(type)
case type
when "registered"
type = 1
when "apologized"
type = 2
end
Subscription.where(:regoption_id => type)
end
ありがとう!
私は次のクラスメソッドを持っていますが、これを行うためのよりきれいな(よりルビー主義の)方法があるかどうか疑問に思いました。
def self.of_users_that(type)
case type
when "registered"
type = 1
when "apologized"
type = 2
end
Subscription.where(:regoption_id => type)
end
ありがとう!
そのような変数を再定義する(文字列から整数に変換する)ことは、悪趣味(コードの臭い)と見なされます。
コードのよりクリーンなバージョンは次のとおりです。
def self.of_users_that(type)
map = {'registered' => 1,
'apologized' => 2}
Subscription.where(:regoption_id => map[type])
end
私は通常、これらの種類の定数のモデル内で定数を宣言します。セルヒオと同じ答えですが、定数を使用しています
class Subscription < ActiveRecord::Base
USER_TYPES = { 'registered' => 1, 'apologized' => 2 }
def self.of_users_that(type)
where(regoption_id: USER_TYPES[type])
end
end
または単にスコープを使用します
scope :registered, where(regoption_id: 1)
scope :apologized, where(regoption_id: 2)
または組み合わせ
class Subscription < ActiveRecord::Base
USER_TYPES = { 'registered' => 1, 'apologized' => 2 }
scope :registered, where(regoption_id: USER_TYPES['registered'])
scope :apologized, where(regoption_id: USER_TYPES['apologized'])
end