2013-04-06 5 views
0

이 문제는 상당히 단순 해 보이지만 이와 같은 문제는 발생하지 않았습니다.모호한 테이블 참조

다음은 설정입니다 :

Post has_many :reader_links 
Post has_many :readers, :through => :reader_links 

내가이 글을 읽는 독자가 있는지 확인해야합니다.

@post.reader_links.where('created_at >= ?', 45.minutes.ago).any?

잘 작동합니다. 그것은 열 created_at 수단 여부 혼란 때문에

@post.readers.where('created_at >= ?', 45.minutes.ago),any?

는 모호한 표 열에서 오류가 발생하는 리더reader_link 객체 또는 객체의. 이는 리더의 클래스가 실제로 사용자이므로 발생합니다. 45 분 전에 reader_links가 작성한 독자를 쿼리하려면 어떻게해야합니까? 내가 좋아하는 뭔가를 찾고 있어요

..

@post.readers.where('reader_link.created_at >= ?', 45.minutes.ago)

+0

샘플 데이터와 예상 출력을 질문에 추가하십시오. 추측은이 시점에서 조금 어려워진다. – scones

답변

1

경우 : 작동 원리 게시물 (다른 순서)

fresh_readers_for_post = User.where('created_at >= ?', 45.minutes.ago).merge(ReaderLink.scoped.merge(Post.where('id = ?', @post.id)) 

의 모든 신선한 독자 나는 그것을 얻는다. 당신은 어느 것을 지정해야 할까? created_at colum 귀하가 말하는 내용 :

@post.readers.where('reader_links.created_at >= ?', 45.minutes.ago).any? 
+0

정확 하 게! 다시 감사합니다. 필자가 원했던 것은'reader_links'를'reader_links'로 만드는 것뿐이었습니다. –

1

당신은 범위를 병합 coul는 ambigious 오류를 제거, 각각의 범위는 자신의 가시 범위의이하세요. meta_where를 사용

:

Post.scoped & (ReaderLink.scoped & User.where(:created_at.gt => 45.minutes.ago)) 

meta_where없이 :

Post.scoped.merge(ReaderLink.scoped.merge(User.where('created_at >= ?', 45.minutes.ago)) 

이 45 분 이상 젊은 모든 독자의 reader_links 독자 데이터를 포함 Post 객체의 배열에 발생합니다. 레일 콘솔에서 사용해보십시오.

편집 : 하나의 게시물에 대한

post_with_fresh_users = Post.where('id = ?', some_id).merge(ReaderLink.scoped.merge(User.where('created_at >= ?', 45.minutes.ago)) 

편집 :

http://benhoskin.gs/2012/07/04/arel-merge-a-hidden-gem

+0

입력 해 주셔서 감사합니다. 그러나 나는 45 분 안에 게시물과 관련된 reader_link 테이블에 추가 된 독자를 쿼리하는 방법을 여전히 잃어 버렸습니다. –

+1

아, 이제 내가 너의 목표를 이해했다고 생각해. 코드를 업데이트하겠습니다. – scones

+0

모델 대신 개체로 쿼리하는 방법이 있습니까? 예 : @ post.scoped ..보다는 Post.scoped .. 나는 하나의 게시물에 코드를 적용하는 방법을 잘 모르겠습니다. –

관련 문제