使用集合选择从联系人id检索联系人详细信息



我使用以下集合select让用户选择联系人名称。

<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。至于关联,电子邮件中有_many个联系人和belongs_to电子邮件中的联系人。我甚至尝试使用inverse_of这些关联,但仍然无法检索到联系人姓名。有没有解决办法?

如果您查看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") %>

最新更新