2009-08-06 2 views
0

Я выполняю итерацию через хэш и отображаю значения в качестве переключателей. Хэш выглядит следующим образом:Доступ к данным post в контроллере

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

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

{ "commit"=>"vote", "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 

Но дает эту ошибку:

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

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

+1

Почему вы настаиваете на вики сообщества для объективных вопросов? Пусть эти люди заслуживают репутацию, которой они заслуживают. – erik

ответ

-2

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

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

2

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

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

Смежные вопросы