在Rails中从object_id转换为有用的东西(名称,电子邮件等)

时间:2012-05-04 17:36:03

标签: ruby ruby-on-rails-3

我正在使用我的第一个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)) %>

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

2 个答案:

答案 0 :(得分:0)

在视图的select_tag中,您可以:

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

这会显示first_name,当用户选择其中一个选项时,user id会填充到select标记的value属性中。

如果要显示全名,可以在用户模型中使用方法:

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 here

的更多信息

答案 1 :(得分:0)

您需要的是options_from_collection_for_select

在你的情况下,它将是:

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

您可以详细了解它和其他助手here