0

我在我的第一个 Ruby on Rails 项目中,我试图在选择框中显示用户列表。我想显示所有用户(当前登录的用户除外)。

我现在有这部分,在我的模型、视图和控制器中使用此代码:

请求控制器:

def new
  @request = Request.new
  @users = User.without_user(current_user)
end

新请求视图:

<div class="field">
  <%= f.label :user_id, 'Select user' %>
  <br />
  <%= select_tag(:user_id, options_for_select(@users)) %>
</div>

用户模型:

scope :without_user,
      lambda{|user| user ? {:conditions =>[":id != ?", user.id]} : {} }

这一切都很好,但我的选择框填充了用户的 object_id。例如,如何将该 object_id 转换为名字/姓氏组合?我尝试做类似的事情:

<%= select_tag(:user_id, options_for_select(@users.first_name)) %>

但这给了我一个“未定义的方法错误”。处理这个问题的最佳方法是什么?

4

2 回答 2

0

在您的视图的 select_tag 中,您可以拥有:

<%= select_tag(:user_id, options_from_collection_for_select(@users, :id, :first_name)) %>

这将显示 first_name 并且当用户选择其中一个选项时,将user id填充到valueselect 标记的属性中。

如果你想显示全名,你可以在你的用户模型中有一个方法:

def full_name
  return first_name + " " + last_name
end

而且,在您看来:

<%= select_tag(:user_id, options_from_collection_for_select(@users, :id, :full_name)) %>

您可以在此处找到更多信息options_from_collection_for_select

于 2012-05-04T17:44:58.060 回答
0

你需要的是options_from_collection_for_select.

在您的情况下,它将是:

<%= select_tag(:user_id, options_from_collection_for_select(@users, :id, :first_name)) %>

您可以在此处阅读有关它和其他助手的更多信息

于 2012-05-04T17:47:17.487 回答