concat两个领域activerecord

时间:2009-12-30 22:05:19

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

我已经习惯了oracle,你可以简单地

concat(field1, ' ', field2)

但如果我使用activerecord找到field1和field2,并且我需要一个空格,我该如何做到这一点?

为你的所有帮助干杯

6 个答案:

答案 0 :(得分:9)

在您的模型中:

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

答案 1 :(得分:4)

对于后代和未来的googlers,你可以做以下假设postgres(也许是mysql?):

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

选择使用|| SQL operator来汇总字段first_namelast_name中的字符串,as name将结果返回到列中&# 34;名称"

可能会返回:

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

答案 2 :(得分:2)

我认为虚拟属性正好在你的小巷里。 This Railscast解释了他们,其中一个示例看起来就像您的用例。

答案 3 :(得分:0)

在连接具有不同数据类型的两个字段时使用#

例如,添加一个整数和带+的字符串会出错。

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

答案 4 :(得分:0)

扩展@Chase Gilliam响应,这是对MySQL DB的查询

User.select("id, CONCAT(name, last_name) as value")

希望有帮助

答案 5 :(得分:0)

我的解决方案::)

scope :full_name_contains, lambda { |query| 
  full_name = Arel::Nodes::NamedFunction.new('concat', [
      arel_table[:first_name], 
      Arel::Nodes.build_quoted(' '), 
      arel_table[:last_name]
    ]
  )

  where(full_name.matches("%#{query}%"))
}

def full_name
  "#{first_name} #{last_name}"
end