Rails 3,has_one / has_many和lambda条件
在这里我的模特:
class User < ActiveRecord::Base has_many :bookmarks end class Topic < ActiveRecord::Base has_many :bookmarks end class Bookmark < ActiveRecord::Base belongs_to :user belongs_to :topic attr_accessible :position validates_uniqueness_of :user_id, :scope => :topic_id end
我想用current_user
获取关联bookmark
所有topics
。 ATM,我这样做:
Topic.all.each do |t| bookmark = t.bookmarks.where(user_id: current_user.id).last puts bookmark.position if bookmark puts t.name end
这是丑陋的,做太多的数据库查询。 我想这样的东西:
class Topic < ActiveRecord::Base has_one :bookmark, :conditions => lambda {|u| "bookmarks.user_id = #{u.id}"} end Topic.includes(:bookmark, current_user).all.each do |t| # this must also includes topics without bookmark puts t.bookmark.position if t.bookmark puts t.name end
这可能吗? 我有其他select吗?
谢谢!
*嗯,我不知道我理解你的问题,但这可能会帮助你:
# code class Topic < ActiveRecord::Base scope :for_user, lambda { |user| includes(:bookmarks).where(bookmarks: { user_id: user.try(:id) || user} ) } # call Topic.for_user(current_user) # => Array of Topics
正如你所看到的范围for_user
的参数 可以是一个用户对象或用户ID 。
希望这可以帮助!
类似的问题:
- 如何根据属于第一个模型的另一个模型的属性来查询模型?
- Rails活动logging查询与“存在”的关联
- Rails 4的范围是find没有孩子的父母
- join多个具有活动logging的表格
- 活动logginghas_many:通过删除一个关联的logging
- Model.reset_column_information不会在rails迁移中重新加载列
- Rails的ActiveRecord之间的date
- 何时使用save !,请创build! 和update_attributes! 在Rails中?
- Rails模型:你将如何创build一个预定义的属性集?
- ActiveRecordcallback和validation的顺序是什么?
- 如何显示在Rails控制台中运行的SQL查询?
- Rails:HasManyThroughAssociationNotFoundError
- Arel在Rails 3.0中究竟是什么?