表单选择以奇怪的方式填充

时间:2014-12-20 17:07:42

标签: ruby-on-rails ruby

我有一个奇怪填充的选择表单。我想知道我是否能得到解释。

架构:

我有一个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?

由于

2 个答案:

答案 0 :(得分:1)

这是因为您的表单正在尝试访问邮件对象的用户方法/属性。

f.select :user

答案 1 :(得分:1)

这是因为您正在使用表单构建器实例fselect定义:user。如果您不想将:usermessage关联,则可以使用select_tag

<%= select_tag :user, options_for_select(@users.all.map { |user| [user.id, user.name] }) %>