我正在迭代哈希并将值显示为单选按钮。哈希看起来像这样:
{
1=>["a", "b"],
2=>["c"],
3=>["a", "d", "f", "g"],
4=>["q"] ..
}
选择值后,参数变为:
{“commit”=>“投票”, “authenticity_token”=> “中db863239855c9f73b9ae54c37f6b92c858acb56f”, “1”=>“a”,“2”=>“c”,“3”=>“d”, “4”=> “中Q”}
如何在控制器的更新方法中访问这些值(POST数据)以更新计数字段?我试过这样的。
@votings = Voting.find(:all, :conditions => {params[:k]=>params[:val]})
@votings.each do |voting|
voting.update_attribute('vote_count',
voting.vote_count+1)
end
但是给出了这个错误:
当你没想到它时,你有一个零对象! 评估nil.each时发生错误..
有谁可以告诉我哪里出错了?
答案 0 :(得分:3)
POST
数据存储在params
哈希中。因此,如果您想要参数1的值,则可以使用params[:1]
。
现在让我们来看看:条件。在find方法中,:conditions
参数可以采用哈希值,这是您提供的。但是你的代码说,取params[:k]
的值并将其设置为params [:val]的值。但是在此示例中params[:k]
为nil,在params散列中没有键:k
。因此,当您搜索时,您将获得@votings的零值。试着在零上使用每个都会给你带来错误。
答案 1 :(得分:-2)
您遇到严重困难的原因是因为您正在反对Rails中的惯例。
尝试使用这个大小,虽然它需要丢弃你已经写过的很多代码,然后想知道你的应用程序中已经注入了魔法Rails:http://railscasts.com/episodes/17-habtm-checkboxes