1
我想從控制器中提取邏輯,使其更加乾燥。在Rails中處理類似以下內容的最佳方式是什麼?在Rails中抽象ActiveRecord模型查詢的最佳實踐?
例如,而不是讓在控制器的查詢,我可以把它放在模型:
class SmoothieBlender < ActiveRecord::Base
belongs_to :user
def self.get_blenders_for_user(user)
self.where(["user_id = ?", user.id])
end
end
或者它會更好地創建一個模塊作爲一個服務層,包括在每個使用它的模型?
module BlenderUser
def get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end
class SmoothieBlender < ActiveRecord::Base
include BlenderUser
belongs_to :user
end
class User < ActiveRecord::Base
include BlenderUser
has_many :smoothie_blenders
end
或者只是使其成爲一個完整的服務類,可以從用戶和Blender控制器訪問?你會把這堂課放在哪裏?
class BlenderService
def self.get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end
我是Ruby和Rails的新手,所以如果這是一個愚蠢的問題/語法不正確,請原諒我。提前致謝!
啊,有道理!有點像.Net中的擴展。謝謝! – MunkiPhD 2010-08-26 19:41:07
如果參數是以params形式傳入的,請記住在其上使用.to_i。例如,在哪裏(「user_id =?」,user_id.to_i) – 2010-08-26 23:00:44
to_i會嘗試解析它,如果它沒有被消毒,我會失敗嗎? – MunkiPhD 2010-08-29 01:49:26