我在几个模型中遵循丑陋的 create_unique 方法,例如:
def self.create_unique(p)
s = Subscription.find :first, :conditions => ['user_id = ? AND app_id = ?', p[:user_id], p[:app_id]]
Subscription.create(p) if !s
end
然后在控制器中#create 动作我有
s = Subscription.create_unique({:user_id => current_user.id, :app_id => app.id})
if s
raise Exceptions::NotAuthorized unless current_user == s.user
@app = s.app
s.destroy
flash[:notice] = 'You have been unsubscribed from '+@app.name+'.'
redirect_to '/'
end