dan*_*anh 5 ruby sql activerecord ruby-on-rails
ruby-noob活动记录查询问题的种类:
Magazine
has_many :subscriptions
User
has_many :subscriptions
Subscription
belongs_to :user
belongs_to :magazine
Run Code Online (Sandbox Code Playgroud)
在控制器中,我想有效地询问current_user是否订阅a_magazine。我认为应该是以下内容...
Subscription.where("user_id = ? and magazine_id = ?", current_user.id, a_magazine.id).count > 0
Run Code Online (Sandbox Code Playgroud)
a)看起来正确吗?b)是否有更有效的方法(假设FK上有索引)c)从风格上来说,是否有更可接受或更简洁的方法?
提前致谢...
更简洁的方法是使用声明查询的哈希方法,这种方法更容易阅读并且出错的机会更少:
Subscription.where(:user_id => current_user.id, :magazine_id => a_magazine.id).any?
Run Code Online (Sandbox Code Playgroud)
您还可以:through根据用户或杂志相应地添加要检查的关系。
class User < ActiveRecord::Base
has_many :subscriptions
has_many :magazines, :through => :subscriptions
end
Run Code Online (Sandbox Code Playgroud)
这使得匹配测试变得非常容易:
user = User.find(1)
user.magazines.where(:magazine_id => magazine_id).any?
Run Code Online (Sandbox Code Playgroud)