我會問我的問題第一:創建的數據:通過關係
將這段代碼邏輯上工作,它是做(最佳實踐角度)正確的事?首先,讓用戶被傳遞給靜態訂閱方法看起來很奇怪
用戶和雜誌通過訂閱(定義見下文)有多對多的關係。你也可以看到,我通過連接來使用,而不是使用has而且屬於很多,這樣我們就可以定義一個訂閱模型。
創建用戶後,他們需要有默認訂閱。遵循單一責任原則,我認爲用戶不應該知道要訂閱哪些默認雜誌。那麼,在創建用戶後,如何創建默認訂閱。 user.likes_sports? user.likes_music?應該定義我們想要的訂閱方法。
我在正確的軌道上嗎?我沒有任何人審查我的代碼,任何代碼建議高度讚賞。
class User < ActiveRecord::Base
after_create create_default_subscriptions
has_many :magazines, :through => :subscriptions
has_many :subscriptions
def create_default_subscriptions
if self.likes_sports?
Subscription.create_sports_subscription(self)
end
end
end
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :magazine
#status field defined in migration
def self.create_sports_subscription(user)
Magazine.where("category = 'sports'").find_each do |magazine|
user.subscriptions << Subscription.create(:user => user, :magazine => magazine, :status=>"not delivered")
end
end
.
.
end
class Magazine < ActiveRecord::Base
has_many :users, :through => :subscriptions
has_many :subscriptions
end
你想添加方法給你的用戶來檢查用戶「likes_sports?」或你想做什麼?在創建用戶後創建一些其他記錄? – Hendrik
做了一個編輯,問題是在帖子的頂部 – user1438150