[RUBY-ON-RAILS] 람다 조건 3 has_one / has_many 레일
RUBY-ON-RAILS람다 조건 3 has_one / has_many 레일
내 모델 여기 :
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를 들어, 관련 북마크를 모든 주제를 가져 싶다. 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
이 못생긴 너무 많은 DB 쿼리를 수행합니다. 나는 이런 식으로 뭔가를 싶습니다 :
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
이게 가능해? 나는 어떤 대안이 있나요?
감사합니다!
해결법
-
==============================
1.* 음, 나는 확실하지 않다 나는 당신의 질문을 이해하지만 당신을 도울 수 있습니다 :
* 음, 나는 확실하지 않다 나는 당신의 질문을 이해하지만 당신을 도울 수 있습니다 :
# 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가 될 수 있습니다.
도움이 되었기를 바랍니다!
유제:
from https://stackoverflow.com/questions/13515225/rails-3-has-one-has-many-with-lambda-condition by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 제거 또는 레일 데이터베이스에 루비를 다시 (0) | 2020.02.15 |
---|---|
[RUBY-ON-RAILS] 브래킷은 무엇인가 [5.1] 액티브 마이그레이션 후 그것이 어떻게 작동합니까? [복제] (0) | 2020.02.14 |
[RUBY-ON-RAILS] 활성 레코드와 여러 테이블에 참여 (0) | 2020.02.14 |
[RUBY-ON-RAILS] 크롬 순 :: ERR_INCOMPLETE_CHUNKED_ENCODING 만 (0) | 2020.02.14 |
[RUBY-ON-RAILS] f.fields_for 및 AJAX와 accepts_nested_attributes_for 레일 (0) | 2020.02.14 |