一个ruby-noob事件记录查询问题的种类:

Magazine
  has_many :subscriptions

User
  has_many :subscriptions

Subscription
  belongs_to :user
  belongs_to :magazine

在 Controller 中,我想有效地询问current_user是否订阅a_magazine。我认为应该是以下内容...
Subscription.where("user_id = ? and magazine_id = ?", current_user.id, a_magazine.id).count > 0

a)看起来正确吗? b)有没有更有效的方法(假设FK上有索引)c)从风格上讲,有没有更可接受或更简洁的方法?

提前致谢...

最佳答案

更简洁的方法涉及使用声明查询的哈希方法,该方法更容易读取,并且出错的机会更少:

Subscription.where(:user_id => current_user.id, :magazine_id => a_magazine.id).any?

您还可以添加:through关系来相应地根据用户或杂志进行检查。
class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :magazines, :through => :subscriptions
end

这使得测试匹配真的很容易:
user = User.find(1)
user.magazines.where(:magazine_id => magazine_id).any?

关于sql - Rails多对多存在查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9948800/

10-10 06:48