一个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/