2014-10-05 42 views
1

我使用以下集合select來讓用戶選擇聯繫人姓名。使用集合從聯繫人ID中檢索聯繫人詳細信息選擇

而不是名稱
<div class="form-group"> 
    <%= f.label :contact %> 
    <%= f.collection_select(:contact, current_user.contacts.all, :id, :name, prompt: true, class: "form-control") %> 
</div> 

但是,這是當我在顯示頁面使用email.contact時顯示的ID。我嘗試使用email.contact.name,它返回一個NoMethodError。至於關聯,電子郵件has_many聯繫人和聯繫人belongs_to電子郵件。我甚至嘗試使用這些關聯的inverse_of,但仍無法檢索聯繫人姓名。有沒有可以解決這個問題的解決方法?

+0

你能解釋一下你的'但是,而不是名字,它的意思是什麼,當我在表演page'使用email.contact在顯示的ID?它與collection_select有什麼關係?電子郵件有很多聯繫人,所以它應該是email.contacts,它會給你一個記錄集合,而不是單個記錄 – Mandeep 2014-10-05 18:31:44

+0

@mandeep下拉菜單顯示所有聯繫人的名稱。但是,當提交按鈕被擊中時,這是保存的ID。例如,如果選擇John,John的用戶標識將被保存而不是名稱。在我正在使用的collection_select中,它看起來像是默認保存了id。不確定,如何在此場景中顯示來自存儲的用戶標識的聯繫人姓名。 – user3224820 2014-10-05 18:43:19

回答

1

如果你看一下collection_select

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {}) 

如果你看看文檔,它說

的:value_method和:text_method參數方法收集的每個成員上進行調用。返回值分別用作每個標籤的值屬性和內容。

所以你需要通過value_method,你希望它在數據庫保存方法,現在你正在使用它的ID。要保存名稱,你可以做這樣的事情:

<%= f.collection_select(:contact, current_user.contacts.all, :name, :name, prompt: true, class: "form-control") %> 
+0

我已經試過了。問題是,我需要contact_id給後臺郵件發送電子郵件。因此,我必須在顯示頁面中顯示名稱,但在工作人員的分貝中使用聯繫人ID。這就是爲什麼早些時候提到這些協會想知道如何使用,如果可能的話。 – user3224820 2014-10-05 19:34:48

+0

@ user3224820對不起,但沒有得到你。在你之前的評論中你提到過你想在db中保存名字而不是你說你想要id?你爲什麼不用db保存聯繫人的id?如果您的關聯設置正確,那麼您可以隨時從id – Mandeep 2014-10-05 19:51:42

+0

獲取其他信息,以免造成混淆。關聯設置正確。所以,理想情況下,我應該能夠使用<%= email.contact.name%>,因爲ID存儲在數據庫中,對吧?相反,我得到一個NoMethodError - 未定義的方法名稱爲「2」:String。 2是這種情況下的聯繫人ID。 – user3224820 2014-10-05 20:13:01

相關問題