我们希望在我们的Rails应用程序中实现一个系统,允许用户将帖子评为True或False。用户单击True后,将为该帖子的True计数添加一票。我们想要设置这个系统,以便如果用户已经单击True,但想要切换到False,他们可以单击False,并且该投票将立即转移到False列计数,在客户端。
我们应该如何实施这样的事情?
我们目前在micropost.rb
中有这个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
这是我们目前的评价.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
答案 0 :(得分:1)
我认为你有正确的想法。不知道为什么你的用户模型有两个belongs_to(我意识到有两个外键,我只是不明白它的原因)。我认为这实际上只是在用户没有该帖子的情况下创建一个新的评级对象,根据他们点击设置正确的值。如果他们确实有现有评级,只需交换评级值。
def switch_value
self.rating = !self.rating
end
如果那不是你想要的,你会介意描述你遇到问题的特定方面吗?