2013-06-05 49 views
1

我有这样的代码在我的Rails应用程序为什么Rails增量方法不保存更改?

if params[:vote][:type] == "up" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.increment(:ups) 
    render text: answer.ups 
end 
if params[:vote][:type] == "down" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.increment(:downs) 
    render text: answer.downs 
end 


它不给任何错误,但增加值未在DB更新来实现大拇指up/down功能。

此代码在rails控制台中正常工作。

请帮帮忙,

在此先感谢

回答

1

请你写你的模型的架构,我指的是数据类型的字段

另一个迁移:

change_column :answers, :ups, :integer, :default: 0 
change_column :answers, :downs, :integer, :default: 0 

可以帮助你

+0

create_table“answers”,:force => true do | t | t.text “answer_data” t.integer “UPS” t.integer “起伏” t.integer “question_id” t.integer “USER_ID” t.datetime “created_at”,日期null =>假 吨.datetime“updated_at”,:null => false 结束 –

+0

递增/递减字段应该有默认值0,否则它不会工作 – Muntasim

+0

我已经使用了一个方法,保持0作为向上/向下的值。在保存模型之前调用该方法 –

1

检查一次

if params[:vote][:type] == "up" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.to_i.increment(:ups) 
    render text: answer.ups 
elsif params[:vote][:type] == "down" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.to_i.increment(:downs) 
    render text: answer.downs 
end 
+0

答案是一个像answer_data,UPS属性模型,起伏等..所以我不能将其转换为整数..我甚至尝试在answer.increment后调用answer.save,但它仍然不起作用 –

3

这是by design。该方法递增属性但不保存。如果还想保存,请使用increment!bang version)。

+0

不需要..仍然显示0在DB –

+0

的增量!方法返回true仍然数据库不反映变化 –

+0

如果它没有记录,我想你的问题在别的地方。尝试手动增加这个东西并保存。如果它不起作用,那么列定义可能有问题。 –