我使用以下集合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") %>