奇怪的是,其中大部分都是按照已經寫好的方式工作的,但我不知道如何評估current_user
是否有徽章(所有關係都是正確的,我我只能在我的課程中遇到麻煩(應該將其部分移到lib或其他內容中),而不管這個問題具體是1)檢查當前用戶是否有記錄,以及2)如果不創建相應的新記錄。在我的用戶類中獲得`current_user`
如果有更簡單或更好的方法來做到這一點,請分享。以下是我:
# Recipe Controller
class RecipesController < ApplicationController
def create
# do something
if @recipe.save
current_user.check_if_badges_earned(current_user)
end
end
,從而爲這一點,它肯定看起來凌亂,我想爲它只是check_if_badges_earned
,而不必通過current_user
到方法,但可能需要因爲它可能並不總是當前用戶啓動此方法。
# User model
class User < ActiveRecord::Base
def check_if_badges_earned(user)
if user.recipes.count > 10
award_badge(1, user)
end
if user.recipes.count > 20
award_badge(2, user)
end
end
def award_badge(badge_id, user)
#see if user already has this badge, if not, give it to them!
unless user.badgings.any? { |b| b[:badge_id] == badge_id}
@badging = Badging.new(:badge_id => badge_id, :user_id => user)
@badging.save
end
end
end
因此,儘管第一種方法(check_if_badges_earned
)似乎excucte罰款,只有當條件滿足時,問題發生在award_badge()
方法本身的表達unless user.badgings.any? { |b| b[:badge_id] == badge_id}
始終計算爲真給運行award_badge()
,所以用戶給予徽章,即使它已經有相同的一個(由badge_id),其次是問題是,它總是將user_id
保存爲1.
關於如何去調試這個任何想法都會很棒!
這是一個很好的提示,我可以看到我可以在我的應用程序中的其他地方使用它,它實際上並不是超級黑客(或許,但是如果將它與我的工作區相比,它更接近我想要的MVC約定)謝謝瑞恩! – 2009-11-15 22:07:26
和btw ...我是LMGTFY的粉絲,只是意識到你創造了它。真棒。 – 2009-11-15 22:38:56
噢,哈克,謝謝,但要把道具給我的犯罪夥伴吉姆加文(http://www.thegarvin.com/)。 – 2009-11-15 23:04:55