有没有办法使用 Activerecord 连接两个字段?不使用虚拟属性

use*_*270 3 ruby-on-rails ruby-on-rails-4

我想将两个字段连接在一起,最好在两个字段之间留一个空格。我知道这可以在模型级别完成,但我无法预测将混合在一起的字段和表,因此我无法为此创建虚拟属性。

以下是我正在尝试做的事情的一个过于简单的示例。

表格:

# Product (id: integer, name: string, variety: string)
# Location (id: integer, city: string)
Run Code Online (Sandbox Code Playgroud)

这将为我提供位置关系以及产品种类:

p=Product.joins(:location).group(:location_id, :variety).pluck(:city, :variety)
Run Code Online (Sandbox Code Playgroud)

现在我需要将地点名称和品种名称连接在一起;这将city来自位置和variety产品。

这只是一个例子,但我会使用更多我无法预测的组合。我宁愿避免为此创建虚拟属性,因为为每个可能的组合添加属性会非常复杂,并且使用受影响的模型创建自己的函数对于这么简单的事情来说有点太多了。

dkn*_*fin 6

我知道这是一个老问题,但在谷歌搜索中出现了,我找到了更好的答案。

@philip-hallstrom 的答案是可行的,但它会在内存中执行连接。在数据库级别执行该连接会更有效,如下所示:

Product
  .joins(:location)
  .group(:location_id, :variety)
  .pluck("CONCAT_WS(' ', locations.city, products.variety)")
Run Code Online (Sandbox Code Playgroud)