连接两个字段 activerecord

发布于 2024-08-16 14:30:38 字数 171 浏览 5 评论 0原文

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

concat(field1, ' ', field2)

,但如果我使用activerecord来查找field1和field2,并且我需要在两者之间留一个空格,我该如何实现这一点?

为您的所有帮助干杯

I'm so used to oracle where you can simply

concat(field1, ' ', field2)

but if I'm using activerecord to find the field1 and field2, and I need a space in between, how do I accomplish this?

Cheers for all your help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

静谧幽蓝 2024-08-23 14:30:38

在你的模型中:

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

in your model:

def full_name
  [first_name, last_name].join(' ')
end
朱染 2024-08-23 14:30:38

对于后代和未来的谷歌用户,您可以假设 postgres(也许是 mysql?)执行以下操作:

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

select 使用 || SQL 运算符 连接字段 first_namelast_name中的字符串as name 在“name”列中返回结果。

这可能会返回:

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

For posterity and future googlers, you can do the following assuming postgres(maybe mysql?):

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

The select uses the || SQL operator to concat the strings from the fields first_name and last_name, and as name returns the result in a column "name".

Which might return:

+----+--------------------+
| id | name               |
+----+--------------------+
| 3  | Ada Lovelace       |
| 18 | Alan Turing        |
+----+--------------------+
万劫不复 2024-08-23 14:30:38

我认为虚拟属性正合你的胃口。 此 Railscast 解释了它们,并提供了一个看起来像您的用例的示例。

I think virtual attributes are right up your alley. This Railscast explains them, with an example that looks just like your use case.

久伴你 2024-08-23 14:30:38

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

例如,用 + 将一个整数和字符串相加将会产生错误。

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

Use # when joining two field with different datatypes.

For instance, adding one integer and string with + will give an error.

class User < ActiveRecord::Base
  def name
    "#{first_name} #{last_name}"
  end
end
羁客 2024-08-23 14:30:38

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

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

希望有帮助

Extending @Chase Gilliam response, this is the query for a MySQL DB

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

Hope that helps

摇划花蜜的午后 2024-08-23 14:30:38

我的解决方案::)

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

My solution: :)

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文