在rails动作中更新数组?

时间:2009-08-30 18:10:42

标签: ruby-on-rails

我在操作中有以下代码:

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

投票是一种字符串类型,没有默认值 - 我只想在此操作发生时第一次设置它。

不幸的是我收到此错误: NoMethodError

当你没想到它时,你有一个零对象! 评估nil.votes时发生错误

任何想法我做错了什么?

2 个答案:

答案 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模型,可以将用户加入“投票”的问题加入。

也许如果你对这方面提供更多的见解,我可以提出更好的建议。欢呼声。