ruby-on-rails - 在 ActiveRecord 中使用 habtm 进行双重连接

标签 ruby-on-rails activerecord associations has-and-belongs-to-many

我有一个奇怪的情况涉及需要双内部连接。我已经尝试了我需要的查询,我只是不知道如何让 Rails 做到这一点。

数据

  • 帐户(has_many :sites)
  • 站点(habtm:用户,belongs_to:帐户)
  • 用户 (habtm :sites)

忽略它们是 habtm 或其他什么,我可以让它们成为 habtm 或 has_many :through。

我希望能够做到

@user.accounts

@account.users

那我当然应该可以做到

@user.accounts < @some_other_account

然后让@user.sites 包含来自@some_other_account 的所有网站。

我摆弄过 habtm 和 has_many :through 但无法让它做我想做的事。

基本上我需要以这样的查询结束(从 phpmyadmin 复制。经过测试和工作):

SELECT accounts.* 
FROM accounts
INNER JOIN sites ON sites.account_id = accounts.id
INNER JOIN user_sites ON sites.id = user_sites.site_id
WHERE user_sites.user_id = 2

我可以这样做吗?进行这种双重连接甚至是个好主意吗?我假设如果用户首先与帐户关联,然后担心获取 @user.sites 会更好,但如果保持原样,它对许多其他事情会更好(用户 <->网站)。

最佳答案

我认为最好为此创建自定义方法,而不是试图将其硬塞进关联中。例如。

# in user.rb
def accounts
  Account.all(:include => {:sites => :users}, :conditions => ["users.id=?", self])
end

def add_account(other_account)
  other_account.sites.each do |site|
    self.sites << site
  end
end

# in account.rb
def users
  User.all(:include => {:sites => :account}, :conditions => ["accounts.id=?", self])
end

未经测试,但这应该适用于 HABTM 或 has_many :through 关联。根据您使用的方法,您可以对查询进行一些优化。

有一天我们可能会得到对深层嵌套的 has_many :through 的支持,这将处理其中的一些问题。

关于ruby-on-rails - 在 ActiveRecord 中使用 habtm 进行双重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1203601/

相关文章:

ruby-on-rails - Postgres查询查找数据库是否为只读模式

ruby-on-rails - 仅用于安全页面的安全回形针 URL

ruby-on-rails - Rails Activerecord 日期从 20 到 20

ruby-on-rails - 如何在 Rails 4 中设置自定义字符串外键?

ruby-on-rails - HTML5 应用程序 list 未在 list 更改时清除缓存

ruby-on-rails - 以这种方式设置错误消息html View ?

ruby-on-rails - 在 Ruby 中传递&符号冒号与仅冒号(符号)之间的区别

SQL JOIN 查询使用 PostgreSQL 创建重复

ruby-on-rails - Rails habtm 和查找没有关联的记录

iphone - 如何使用 CFBundleTypeName 添加 mp3 支持