Rails帮助如何创建评级控制器

时间:2011-04-03 13:39:41

标签: ruby-on-rails ruby-on-rails-3

我正在尝试根据这个答案创建一个简单的评级控制器。 Rails 3 rateable model - How to create ajax rating?

在我的表格中我有:

rating_score => The current score
ratings => The number of ratings which led to the score

这是我的费率行动:

  def rate
    @konkurrancer = Konkurrancer.find(params[:id])
    @container = "Konkurrancer"+@konkurrancer.id.to_s

    @konkurrancer.rating_score += params[:rating].to_i
    @konkurrancer.ratings += 1
    @konkurrancer.save

    respond_to do |format|
      format.js
    end
  end

我的日志:

Started POST "/konkurrancers/rate/38" for 127.0.0.1 at 2011-04-03 19:28:13 +0200

  Processing by KonkurrancersController#rate as JS
  Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"q+CkUReuh0mmkSjRcd+U/JmB1tV
FWHRpOeIFxy20afs=", "vind"=>{"rating"=>"6"}, "commit"=>"Gem Vind", "id"=>"38"}
  ←[1m←[35mKonkurrancer Load (0.0ms)←[0m  SELECT `konkurrancers`.* FROM `konkurr
ancers`
  ←[1m←[36mCACHE (0.0ms)←[0m  ←[1mSELECT `konkurrancers`.* FROM `konkurrancers`←
[0m
  ←[1m←[35mCACHE (0.0ms)←[0m  SELECT `konkurrancers`.* FROM `konkurrancers`
  ←[1m←[36mKonkurrancer Load (0.0ms)←[0m  ←[1mSELECT `konkurrancers`.* FROM `kon
kurrancers` WHERE (`konkurrancers`.`cached_slug` = '38') LIMIT 1←[0m
  ←[1m←[35mSQL (15.6ms)←[0m  SELECT sluggable_id FROM slugs WHERE ((slugs.slugga
ble_type = 'Konkurrancer' AND slugs.name = '38' AND slugs.sequence = 1))
  ←[1m←[36mKonkurrancer Load (0.0ms)←[0m  ←[1mSELECT `konkurrancers`.* FROM `kon
kurrancers` WHERE (`konkurrancers`.`id` = 38) LIMIT 1←[0m
  ←[1m←[35mSQL (0.0ms)←[0m  BEGIN
  ←[1m←[36mSlug Load (0.0ms)←[0m  ←[1mSELECT `slugs`.* FROM `slugs` WHERE (`slug
s`.sluggable_id = 38 AND `slugs`.sluggable_type = 'Konkurrancer') ORDER BY id DE
SC LIMIT 1←[0m
  ←[1m←[35mAREL (0.0ms)←[0m  UPDATE `konkurrancers` SET `ratings` = 84, `updated
_at` = '2011-04-03 17:28:13' WHERE (`konkurrancers`.`id` = 38)
  ←[1m←[36mSQL (0.0ms)←[0m  ←[1mCOMMIT←[0m
Rendered konkurrancers/_rating.html.erb (0.0ms)
Rendered konkurrancers/rate.js.erb (31.2ms)
Completed 200 OK in 250ms (Views: 171.6ms | ActiveRecord: 15.6ms)

问题是参数评级没有得到保存。

1 个答案:

答案 0 :(得分:1)

如果查看显示的最后一行SQL行,您会看到它正在从您的评级表中选择所有评级。这让我觉得@konkurrancer.ratings实际上是一个数组(收视率集合),当你执行@koncurrencer.ratings += 1时,你试图为它添加1。这说明这可能是一个阶级设计问题。你的意思是有一个Koncurrencer对象有很多评级对象,或者你的意思是评级只是一个整数和(因为它似乎在你引用的帖子中)?