Ruby on rails 使用self.calculate时出现未定义错误
我想在rails中执行mysql函数组_CONCAT。 我正在使用活动记录的计算方法。 像这样自我计算(:group\u concat,:id) 我不知道这是不是正确的方法 你知道如何在rails中执行group_concat吗?Ruby on rails 使用self.calculate时出现未定义错误,ruby-on-rails,redmine,Ruby On Rails,Redmine,我想在rails中执行mysql函数组_CONCAT。 我正在使用活动记录的计算方法。 像这样自我计算(:group\u concat,:id) 我不知道这是不是正确的方法 你知道如何在rails中执行group_concat吗? 与上面@Camway注释的activerecord的find方法一样,使用合适的Rails方法进行连接、选择和分组也很容易做到这一点。例如,假设我有用户和区域,一个用户可以有0到多个区域,一个区域可以有0到多个用户 这是我的地区模型: class Region <
与上面@Camway注释的activerecord的find方法一样,使用合适的Rails方法进行连接、选择和分组也很容易做到这一点。例如,假设我有用户和区域,一个用户可以有0到多个区域,一个区域可以有0到多个用户 这是我的地区模型:
class Region < ActiveRecord::Base
# attributes: id (integer), code (string)
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
# attributes: id (integer), email (string)
has_and_belongs_to_many :regions
end
请注意,由于这是使用适当的AREL支持的AR方法,因此它是可链接的。也就是说,您可以将“”.regions\u listing“添加到针对用户模型的几乎任何AR查询的末尾,它将为您的查询拾取的任何用户对象提供组连接方法/数据
因此:
ruby > User.where("users.email like 'b%'").regions_listing.map { |u| [u.email, u.regions_list] }
=> [["billy@bob.com", "0,4"], ["big@ed.com", "2,3,4,5"]]
此外,您还可以使用HAVING(例如,查找附加到区域0和区域4的所有用户)获取“已制造区域”列表字段中的数据:
ruby > User.regions_listing.having("regions_list LIKE '%0%4%'").map { |u| [u.email, u.regions_list] }
=> [["joe@blow.com", "0,1,2,3,4,5"], ["billy@bob.com", "0,4"]]
您可以随时执行任何您想要的原始SQL。是的,sergio,但在这种情况下,我将不得不更改许多代码。因为我使用的是活动记录的find方法,所以它已经负责生成查询了。那么,有没有一种方法可以在不使用原始sql查询的情况下集成group_concat?顺便说一句,如果您对这个问题有实际的SQL查询,那么请使用thnx。。我从来没能让group_concat与rails很好地配合使用,通常我发现最好的选择是使用Model。选择('group_concat(COLUMN_NAME SEPARATOR)”,作为别名)。group('standard_group_by_field'))
ruby > User.regions_listing.map { |u| [u.email, u.regions_list] }
=> [["joe@blow.com", "0,1,2,3,4,5"], ["sally@mae.com", "1,2,5"], ["billy@bob.com", "0,4"], ["jane@doe.com", "3"], ["big@ed.com", "2,3,4,5"]]
ruby > User.where("users.email like 'b%'").regions_listing.map { |u| [u.email, u.regions_list] }
=> [["billy@bob.com", "0,4"], ["big@ed.com", "2,3,4,5"]]
ruby > User.regions_listing.having("regions_list LIKE '%0%4%'").map { |u| [u.email, u.regions_list] }
=> [["joe@blow.com", "0,1,2,3,4,5"], ["billy@bob.com", "0,4"]]