2009-08-06 44 views
0

私はハッシュを反復処理し、その値をラジオボタンとして表示しています。ハッシュは次のようになります。値を選択した後コントローラ内の投稿データへのアクセス

{ 
1=>["a", "b"], 
2=>["c"], 
3=>["a", "d", "f", "g"], 
4=>["q"] .. 
} 

、パラメータは次のようになります。

私は更新するために、コントローラの更新方法では、これらの値(POSTデータ)にアクセスするにはどうすればよい

{ "commit"=>"vote", "authenticity_token"=>"db863239855c9f73b9ae54c37f6b92c858acb56f", "1"=>"a", "2"=>"c", "3"=>"d", "4"=>"q"}

カウントフィールド?私はこのようにしてみました。

@votings = Voting.find(:all, :conditions => {params[:k]=>params[:val]}) 
@votings.each do |voting| 
    voting.update_attribute('vote_count', 
    voting.vote_count+1) 
end 

しかし、このエラーを与える:私は間違っていたところ

You have a nil object when you didn't expect it! The error occurred while evaluating nil.each..

誰も教えてもらえますか?

+1

なぜ客観的な質問のためにコミュニティWikiを主張していますか?これらの人々が彼らにふさわしい評判を得るようにしましょう。 – erik

答えて

2

POSTデータがparamsハッシュに格納されています。それはあなたがすでに魔法Railsの疑問を抱いてちょうどあなたのアプリケーションに息その後、書かれているコードの多くを捨てる必要になりますが、

は、大きさのためにこれを試してみてください。したがって、パラメータ1の値を使用する場合は、params[:1]を使用します。

ここで、条件を見てみましょう。 findメソッドでは、:conditionsパラメータは、提供しているハッシュを取ることができます。しかし、あなたのコードは、params[:k]の値をとり、それをparams [:val]の値に設定すると言っています。しかし、params[:k]はこの例ではnilです。あなたのparamsハッシュには:kというキーはありません。だからあなたが検索しているときに、あなたは@votingsの価値を取り戻しています。それぞれを無制限に使用しようとすると、エラーが発生します。

関連する問題