我已经习惯了oracle,你可以简单地
concat(field1, ' ', field2)
但如果我使用activerecord找到field1和field2,并且我需要一个空格,我该如何做到这一点?
为你的所有帮助干杯
答案 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_name
和last_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