2011-04-03 62 views
0

我想根据此答案创建简单的评级控制器。 Rails 3 rateable model - How to create ajax rating?Rails帮助如何创建评级控制器

在我的表,我有:

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

这里是我的速度行动:

def rate 
    @konkurrancer = Konkurrancer.find(params[:id]) 
    @container = "Konkurrancer"[email protected]_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

这条线哪条有19号? – demas 2011-04-03 13:57:34

+0

@ konkurrancer.ratings + = 1 – 2011-04-03 14:20:50

回答

1

如果您查看显示的最后一条SQL行,您会看到它将从您的评级表中选择所有评级。这使我认为@konkurrancer.ratings实际上是一个数组(收视率的集合),并且当你做@koncurrencer.ratings += 1时,你试图给它加1。这说这可能是一个类设计问题。你的意思是说有一个Koncurrencer对象有很多评级对象,或者你的意思是评级只是一个整数(因为它似乎在你引用的文章中)?

+0

如何创建一个需要参数评级并将其添加到rating_score并将评分加1的动作 – 2011-04-03 14:04:03

+0

这是您的类的设计问题。我的猜测是,在没有看到代码的其余部分的情况下,您已经设置了Koncurrencer的has_many评级,并且这些评级会在评级表中生效,因为您只是希望评级成为访问者的属性。您需要修复Koncurrencer类,然后您的费率操作才能正常工作。或者,如果您希望评分存在于单独的表格中,那么您无需在班级中明确计算评分数量,只需计算该Koncerrencer对象的评分表格中的行数 – 2011-04-03 15:01:10

+0

已经消除了这种关系。现在表单提交没有任何错误。但问题是,rating_score没有被提交。该参数评级发送给该操作。 – 2011-04-03 15:36:00