Rails加入ActiveRecord关系

时间:2017-03-22 21:28:04

标签: join activerecord ruby-on-rails-5

我的部分问题是知道如何描述我甚至在做什么,所以请原谅这个潜在的漫步:

好的,所以我需要找到一个地址列表,所以我有一个关系查找,如:

addresses = Address.where("lower(state) LIKE ? AND lower(city) LIKE ?, state.downcase, city.downcase)

这很有效:我从所有地址中获取了一个列表,其中城市和州是传入的值。接下来,我有一个User,其中包含一个包含所有ID的数组address_ids与之相关的所有地址。我想找到具有上述查询中找到的任何一个ID的所有用户。首先,我创建一个包含所有这些ID的数组:

id_array = Array.new()
addresses.each do |address|
    id_array.push(address.id)
end

然后我接受这个新数组并执行查找具有address_ids数组的用户,该数组包含id_array个值中的任何一个。这可以通过以下方式完成:

applicable_users = User.where('address_ids && ?', '{' + id_array.to_s + '}')

这也有效。现在,我有一个符合一组条件的所有地址列表,以及一组符合该条件的用户列表。 NOW 我想创建一个数组(所以我可以把它变成JSON,然后再渲染它),列出每个地址和相应的用户。

我现在这样做的方法是循环遍历applicable_users,浏览每个address_ids,找到我想要的address,并将其推送到新的address_array = Array.new() applicable_users.each do |user| user.address_ids.each do |address_id| selected_address = addresses.find(address_id.to_i) address_array.push([selected_address..., user.first_name, user.last_name]) end end 数组,一个la:

ember server

长话短说:这个现在正在运作,但感觉既脆弱又不必要。有没有办法加入这两个ActiveRecord关系,以便我可以跳过循环/恶作剧?

即使经过几个小时的研究,我仍然有点难以开始,所以任何方向都非常感激。

1 个答案:

答案 0 :(得分:1)

将名为$('#<%= dom_id(@comment) %>').fadeOut(); 的列添加到organization_id表。

将名为users的列添加到organization_id表。

按如下方式配置模型

addresses

然后您的代码将归结为此

// app/models/address.rb
class Address < ApplicationRecord
  belongs_to :organization
end

// app/models/user.rb
class User < ApplicationRecord
  belongs_to :organization
end

// app/models/organization.rb
class Organization < ApplicationRecord
  has_many :users
end

如果您有任何问题,请与我们联系。