私はいくつかのモデルで醜い 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