Доступ к данным поста в контроллере - PullRequest
0 голосов
/ 06 августа 2009

Я перебираю хеш и показываю значения в виде переключателей. Хеш выглядит так:

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

После выбора значений параметры становятся:

{"commit" => "голосования", "Authenticity_token" => "db863239855c9f73b9ae54c37f6b92c858acb56f", "1" => "a", "2" => "c", "3" => "d", "4" => "д"}

Как я могу получить доступ к этим значениям (данным 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 ..

Кто-нибудь может сказать, где я ошибся?

Ответы [ 2 ]

3 голосов
/ 06 августа 2009

Данные POST хранятся в хеше params. Поэтому, если вы хотите получить значение параметра 1, вы должны использовать params[:1].

Теперь давайте посмотрим на: условия. В методе find параметр :conditions может принимать хеш, который вы и предоставляете. Но ваш код говорит: возьмите значение params[:k] и установите для него значение params [: val]. Но в этом примере params[:k] равен нулю, в вашем хэше params нет ключа :k. Поэтому, когда вы ищете, вы получаете нулевое значение для @votings. Попытка использовать каждое на нуле приводит к вашей ошибке.

0 голосов
/ 06 августа 2009

Причина, по которой вы испытываете серьезные трудности, заключается в том, что вы работаете против соглашений, заключенных в Rails.

Попробуйте это по размеру, хотя для этого потребуется выбросить много кода, который вы уже написали, а потом задуматься о волшебных Rails, которые только что вдохнули в ваше приложение: http://railscasts.com/episodes/17-habtm-checkboxes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...