我在操作中有以下代码:
@user = @current_user
@user.votes[1430]='up'
@user.update_attributes(params[:user])
投票是一种字符串类型,没有默认值 - 我只想在此操作发生时第一次设置它。
不幸的是我收到此错误: NoMethodError
当你没想到它时,你有一个零对象! 评估nil.votes时发生错误
任何想法我做错了什么?
答案 0 :(得分:0)
错误的原因似乎是@user是一个零引用。
您可以通过在控制台窗口中使用日志记录和检查来确认:
logger.info“user is nil”if @ user.nil?
您将@user指定为@current_user的值。我以前见过这种模式,通常current_user是一个函数,在别处声明,而不是实例变量。如果您正在使用该模式,那么该行应该类似于@ user = current_user。
(另外,如果投票是一个字符串,你的第二行似乎是指该字符串的索引1430,这可能不是你想要的。)
答案 1 :(得分:0)
我正在分离评论,因为我不想劫持Evil Trouts的回应,而我们似乎正在偏离最初所说的内容。
不幸的是我收到了这个错误:NoMethodError
当你没想到它时,你有一个零对象!评估nil.votes时发生错误
为此,请查看authlogic example应用程序。我的猜测是你没有适当的before_filter
设置,并且不要求用户登录该操作。
1430实际上是两个单独的ID
我没有完全遵循这一点。它是两个ID的串联?有哪些ID?说实话,我从来没有使用数组作为我的数据库中的字段类型,所以我不知道它的优点是什么,但每当我认为数组是一个好主意时,我通常会质疑是否将它作为一个单独的模型,因此,表格是否更好。
听起来你所描述的情况可能有一个Question
User
可以投票。如果是这样,我可能会有一个单独的Voteable
模型,可以将用户加入“投票”的问题加入。
也许如果你对这方面提供更多的见解,我可以提出更好的建议。欢呼声。