Ruby on rails 字符串连接不可能?

Ruby on rails 字符串连接不可能?,ruby-on-rails,ruby,Ruby On Rails,Ruby,所以在过去的两个小时里,我一直在尝试用我所有的用户填充一个组合框。我设法在一个组合框中获得所有的名字,但我希望他们的全名在组合框中。没问题,你会想,只要把名字连在一起就行了而您需要做的是在用户模型上定义一个方法来为您执行这种连接。无法连接符号。因此,在您的用户模型中,添加以下功能: def name "#{self.first_name} #{self.last_name}" end 然后将视图中的代码更改为: <%= collection_select(:user, :user_i

所以在过去的两个小时里,我一直在尝试用我所有的用户填充一个组合框。我设法在一个组合框中获得所有的名字,但我希望他们的全名在组合框中。没问题,你会想,只要把名字连在一起就行了而您需要做的是在用户模型上定义一个方法来为您执行这种连接。无法连接符号。因此,在您的用户模型中,添加以下功能:

def name
  "#{self.first_name} #{self.last_name}"
end
然后将视图中的代码更改为:

<%= collection_select(:user, :user_id, @users, :user_id, :name, {:prompt => false}) %>
false})%>

这不是rails给你的错误,而是ruby。您正在尝试组合符号
:user\u firstname
:user\u lastname

符号是一种变量类型,就像integer、string或datetime(从技术上讲,它们是类,但在本文中,我们可以将它们视为变量类型)。它们看起来类似于字符串,功能也类似于字符串,但符号串联的行为没有定义。本质上,您试图发送的方法是
user\u firstnameuser\u lastname
,这与试图连接两个符号一样没有意义

您需要了解的是,此参数正在您的用户对象上查找一个方法,它无法理解两个符号的组合。您需要在模型中定义一个方法:

def fullname
  [user_firstname, user_lastname].reject{|v| v.blank?}.join(" ")
end
这将为您返回名+姓,然后在参数中发送
:fullname
(因为它将调用集合中每个用户对象的方法):

false})%>

此外,在每一列前面加上表名被认为是一种糟糕的做法<代码>用户。用户名看起来只是多余的。我更喜欢去掉前缀,但我想这主要取决于个人偏好。

value和display属性的参数是方法名,而不是用户对象上的表达式

要更精确地控制格式,可以使用
select
标记帮助器:

select("user", "user_id", @users.each {|u| [ "#{u.first_name u.last_name}", u.user_id ] })

这些符号非常有用。

您正在将
+
消息发送到类
符号的对象。这就是它不起作用的原因。
def fullname
  [user_firstname, user_lastname].reject{|v| v.blank?}.join(" ")
end
<%= collection_select(:user, :user_id, @users, :user_id, :fullname, {:prompt => false})%>
select("user", "user_id", @users.each {|u| [ "#{u.first_name u.last_name}", u.user_id ] })