2012-11-22 30 views
0

可能重複:
I want to return a single result using .find() with Ruby on RailsRuby on Rails的我試圖使用find()方法返回一個結果

這是我的代碼

<%= f.select :user_id, User.find(:user_id).collect {|t| 
    [t.user_name, t.id]} %> 

這給輸出

Couldn't find User with id=user_id 

它似乎沒有傳遞變量,而是將'user_id'作爲字符串傳遞。

我只是希望它的一個結果返回到無論是選擇列表或標籤

我是相當新的ROR,我可能要對這個完全錯誤的方式。任何幫助深表感謝。

回答

4

您正在將user_id傳遞給find方法,該方法是一個符號,而不是用戶標識。

您必須傳遞一個數字才能找到,然後查找將搜索具有該ID的記錄。

另一個問題,你爲什麼要調用搜索的結果收集?查找只返回一行,而不是數組。

這裏是你如何組織你的代碼:

你應該得到用戶變量到控制器,例如:

@user = User.find(params[:id])

當心,找拋出一個異常,如果該模型是不如您所見,請考慮使用find_by_id,如果未找到任何模型,則返回nil。

然後,您可以在您的視圖中使用@user。

如果你想只在它的用戶顯示選擇標記,請執行下列操作:

<%= f.select, :user_id, options_for_select([[@user.user_name, @user.id]]) %>

檢查http://guides.rubyonrails.org/form_helpers.html表單助手。

+0

好的,那麼我想傳遞什麼樣的變量? –

+0

取決於您想要如何獲取數據,請參閱我的編輯。 – Intrepidd

+0

感謝您的詳細解釋。它似乎適用於'編輯視圖',但不適用於'新視圖' –

-1

ActiveRecord中有一個方法:@user = User.find_by_id(params [:id])。它將返回一個實例對象@user,您可以在其中調用@ user.name。 ruby慣例是這樣的 - 如果你將@user傳遞給一個方法,它接收一個ID作爲參數,你不必寫@ user.id,Rails會完全理解你。

+0

實際上,find()方法與find_by_id()方法相同。 – okeen

+0

不能,如果找不到記錄,find()會拋出,find_by_id()將返回零,稍有區別! – Intrepidd