我正在尝试根据这个答案创建一个简单的评级控制器。 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)
问题是参数评级没有得到保存。
答案 0 :(得分:1)
如果查看显示的最后一行SQL行,您会看到它正在从您的评级表中选择所有评级。这让我觉得@konkurrancer.ratings
实际上是一个数组(收视率集合),当你执行@koncurrencer.ratings += 1
时,你试图为它添加1。这说明这可能是一个阶级设计问题。你的意思是有一个Koncurrencer对象有很多评级对象,或者你的意思是评级只是一个整数和(因为它似乎在你引用的帖子中)?