Обновить массив в действии рельсов? - PullRequest
0 голосов
/ 30 августа 2009

У меня есть следующий код в действии:

@user = @current_user
@user.votes[1430]='up'
@user.update_attributes(params[:user])

Голосование является строковым типом, значения по умолчанию нет - я просто хочу установить его впервые, когда произойдет это действие.

К сожалению, я получаю эту ошибку: NoMethodError

У вас есть нулевой объект, когда вы этого не ожидали! Произошла ошибка при оценке nil.votes

есть идеи, что я делаю не так?

Ответы [ 2 ]

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

Я делюсь комментариями, так как не хочу угонять ответ «Злых брюк», и мы, кажется, отклоняемся от того, о чем изначально говорилось.

К сожалению, я получаю эту ошибку: NoMethodError

У вас есть нулевой объект, когда вы этого не ожидали! Произошла ошибка при оценке nil.votes

Для этого взгляните на пример authlogic . Я предполагаю, что у вас нет соответствующей настройки before_filter и вы не требуете входа пользователя в систему для этого действия.

1430 - это фактически два отдельных идентификатора

Я не полностью следую этому. Это объединение двух идентификаторов? Для чего нужны идентификаторы? Если честно, я никогда не использовал массив как тип поля в своей базе данных, поэтому я не знаю, каковы его преимущества, но всякий раз, когда я думаю, что массив будет хорошей идеей, я обычно задаю вопрос будет ли лучше иметь отдельную модель и, следовательно, таблицу.

Похоже, что описываемая вами ситуация может иметь Question, за которую User может проголосовать. Если это так, у меня может быть отдельная модель Voteable, которая объединит пользователей с вопросами, по которым они могут проголосовать "за".

Может быть, если вы предоставите более глубокое понимание этой стороны вещей, я могу сделать лучшее предложение. Приветствия.

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

Кажется, причиной ошибки является то, что @user - нулевая ссылка.

Вы можете подтвердить это с помощью регистрации и проверки в окне консоли:

logger.info "user is nil" if @ user.nil?

Вы назначаете @user значением @current_user. Я видел этот шаблон раньше, и обычно current_user - это функция, объявленная в другом месте, а не переменная экземпляра. Если вы используете этот шаблон, строка должна выглядеть примерно так: @user = current_user.

(Кроме того, если голосами является строка, ваша вторая строка, похоже, ссылается на индекс 1430 этой строки, что, вероятно, тоже не то, что вам нужно.)

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