我有一个奇怪填充的选择表单。我想知道我是否能得到解释。
架构:
我有一个User模型,其中包含一个名为Conversations的模型。反过来has_many消息和消息属于对话。用户和消息除此之外没有其他链接。
消息控制器
我正在调试一个小型消息传递系统,因此我决定将所有用户(我知道,我知道)传递给我的视图,这样我就可以在下拉列表中显示它们并测试向它们发送消息。基本上只是
def new
@message = Message.new
@users = User.all
end
由于某些奇怪的原因,我必须在我的Message类中使用belongs_to :user
,否则我会收到错误undefined method "user" for #<Message:0x0000000581b898>
查看
在我的表格中我基本上有
<%= form_for(@message) do |f| %>
<div class="form-group">
<%= f.select :user, collection: @users.all.map { |user| [user.id, user.name] }%>
</div>
Other nonsense
<% end %>
问题
因此,在生成新邮件时,如果我使用Message.User.id
提供正确的数据,为什么我的下拉列表会尝试访问@users= User.all
,而不仅仅是User.id?
由于
答案 0 :(得分:1)
这是因为您的表单正在尝试访问邮件对象的用户方法/属性。
f.select :user
答案 1 :(得分:1)
这是因为您正在使用表单构建器实例f
为select
定义:user
。如果您不想将:user
与message
关联,则可以使用select_tag
。
<%= select_tag :user, options_for_select(@users.all.map { |user| [user.id, user.name] }) %>