2012-03-26 15 views
1

私たちは、Railsアプリケーションで、ユーザーが投稿をTrueまたはFalseとして評価できるようにするシステムを実装したいと考えています。ユーザーがTrueをクリックすると、その投稿のTrueカウントに1つの投票が追加されます。このシステムを設定して、ユーザーが既にTrueをクリックしていて、Falseに切り替える場合は、Falseをクリックして、その投票をクライアント側のFalse列数に転送​​するようにします。投稿の評価システムが真または偽

このような実装をどうすればよいですか?

我々は現在、

belongs_to :user 
    belongs_to :target_user, :class_name=>"User", :foreign_key=>"belongs_to_id" 
    has_many :ratings 

def rateable_by_user?(user) 
    self.ratings.where(:rater_id=>user.id).empty? 
end 

micropost.rb

でこれを持っているが、ここで私はあなたが正しい考えを持っていると思う私たちの現在のrating.rb

class Rating < ActiveRecord::Base 
    attr_accessible :micropost_id, :owner_id, :rater_id, :rating 
    belongs_to :micropost 
    belongs_to :target_user, :class_name=>"User", :foreign_key=>"owner_id" 
    belongs_to :user, :class_name=>"User", :foreign_key=>"rater_id" 
    scope :trues, where("rating = ?", "true") 
    scope :falses, where("rating = ?", "false") 
end 

答えて

1

です。なぜあなたは2つのbelongs_toをユーザモデルに持っているのか分かりません(私は2つの外部キーがあることを認識していますが、その理由は分かりません)。私は本当にこれはちょうど、新しい評価オブジェクトを作成するには、ユーザーがその投稿のために1つを持っていない場合、それらがクリックに基づいて正しい値を設定することになると思う。既存のレーティングがある場合は、単にレーティング値を交換します。

def switch_value 
    self.rating = !self.rating 
end 

これはあなたが探しているものではない場合は、問題の特定の側面について説明してもらえますか?

+0

私は、AJAXスタイルの実装をより多くしようとしていたと思います。 Falseをクリックするとユーザーの評価が偽に設定されますが、クリックするとTrueに変わります。問題はシンプルに見えますが、実際には非常に複雑なので、説明するのはほとんど不可能です。 –