2009-12-30 86 views
2

我已经习惯到Oracle,你可以简单地CONCAT两个领域的ActiveRecord

concat(field1, ' ', field2) 

,但如果我使用ActiveRecord找到Field 1和场2,我需要之间的空间,我该怎么办完成这个?

干杯您的帮助

回答

2

我认为虚拟属性是对你的胡同。 This Railscast解释他们,看起来就像你的用例。

9
在模型

def full_name 
    [first_name, last_name].join(' ') 
end 
+0

这可以严格用于只显示在选择标签? – user211662 2009-12-30 22:28:41

+1

不,它只是返回一个由两个连接字段组成的字符串,因此您可以在任何位置使用它。 – bobbywilson0 2009-12-30 23:23:24

+0

偶然,我怎么写,如果我有这样的事情,这是第一个选择哪个有名字和第二个选择哪个是价格... 选择“销售”,“名称”,销售。 find(:all,:select =>'DISTINCT name',:order =>'price')。collect {| x | [x.name]} – user211662 2009-12-31 00:08:15

2

为后代和未来的Google,你可以做以下假设Postgres的(也许在mysql):

User.select("(first_name || ' ' || last_name) as name").where(organization: current_user.organization) 

的选择使用||SQL operator到Concat的了字段first_namelast_nameas name中的字符串将结果返回到“名称”列中。

可能返回:具有不同数据类型连接两个场时

+----+--------------------+ 
| id | name    | 
+----+--------------------+ 
| 3 | Ada Lovelace  | 
| 18 | Alan Turing  | 
+----+--------------------+ 
0

使用#

例如,将一个整数和字符串与+相加将给出错误。

class User < ActiveRecord::Base 
    def name 
    "#{first_name} #{last_name}" 
    end 
end