2009-08-30 68 views
0

我有下面的代碼在動作:在rails動作中更新數組?

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

投票是一個字符串類型,沒有默認值 - 我只是想此操作時設置它的第一次。

不幸的是我得到這個錯誤: NoMethodError

你有一個零對象時,你沒想到吧! 評估nil.votes時發生的錯誤

任何想法我做錯了什麼?

回答

0

錯誤的原因似乎是@user是無參考。

您可以通過日誌和在控制檯窗口,檢查證實了這一點:

logger.info「用戶是零,」如果@ user.nil?

您正在將@user指定爲@current_user的值。我以前見過這種模式,通常current_user是一個函數,在其他地方聲明,而不是實例變量。如果您使用的是這種模式,那麼該行應該像@user = current_user那樣。

(此外,如果票是一個字符串,你的第二個行似乎指的是字符串,這可能不是你想要什麼或者指數1430。)

+0

嗨邪惡的鱒魚, 感謝您的答案!索引1430不投票數組?因爲如果是這樣,那就是我想要做的。 從@user = current_user得到類似的錯誤,我使用authlogic如果這有所作用 – Elliot 2009-08-30 18:31:25

+0

是否要求用戶在此操作之前登錄?而且,投票的索引(如果它是一個字符串)不會使其成爲數組,它將查找字符串位置1430處的字符。這裏有一些關於http://www.ruby-doc.org/core/classes/String的更多信息。html#M000771 – theIV 2009-08-30 18:44:28

+0

啊,那我該如何讓它成爲一個數組?它應該是鍵入文本? – Elliot 2009-08-30 19:03:55

0

我分裂掉的意見,因爲我不想劫持邪惡鱒魚的反應,我們似乎正在偏離最初談到的內容。

Unfortunately I get this error: NoMethodError

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

爲此,請查看authlogic example應用程序。我的猜測是,您沒有設置適當的before_filter,並且不需要用戶在該操作中登錄。

the 1430 is actually two seperate IDs

我不完全按照這個。這是兩個ID的串聯?什麼是ID?說實話,我從來沒有使用數組作爲數據庫中的字段類型,所以我不知道它的優點是什麼,但每當我認爲數組是一個好主意時,我通常會問不管它是不是更好,只是讓它成爲一個單獨的模型,因此,表。

聽起來像你描述的情況可能有Question哪一個User可以投票。如果是這樣的話,我可能會有一個單獨的Voteable模型,它可以讓用戶加入他們可以投票的問題。

也許如果你提供一些更多的洞察這方面的事情,我可以提出一個更好的建議。乾杯。