2016-12-15 1 views
0

부분적으로 조인 테이블에서 열에 액세스하려고합니다. 'normal'보기 (예 : fakeposts # index)에서이 항목에 액세스하면 부분적으로 동일한 작업을 수행하려는 경우 작동하지 않습니다.레일 : 부분에서 조인 테이블의 열을 액세스 할 수 없습니다.

예 :

가 나는 사용자와 fakeposts 테이블을 가지고있다. 각 사용자에 대해 내가 위해 특정 (무작위)에서 fakeposts을 표시 할 - 즉 randomized_time 열을 기반으로 - 조인 테이블에 저장되는 :

randomized_posts 테이블 :

user_id | fakepost_id | randomized_time 

내 모델은 다음과 같이 : 내 fakepost_controller.rb에서

#user.rb 
has_many :randomized_fakeposts 

#fakepost.rb 
has_many :randomized_fakeposts 

# randomized_fakepost.rb 
belongs_to :fakepost 
belongs_to :user 

내가 CURRENT_USER에 대한 fakeposts을 얻을 나의 선택에 열 "randomized_time"를 추가 할 :

이 작동하지 않는

<% @fakeposts.each do |post| %> 
    <%= post.randomized_time %> 
<% end %> 

index.html.erb :

내 fakepost_controller.rb

def index @fakeposts = Fakepost.joins(:randomized_fakeposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") end 

노력하고 있습니다 index.html.erb 내 부분

#index.html.erb 
<% @fakeposts.each do |post| %> 
    <%= render :partial => "layouts/individual-post", :locals => {:post => post} %> 
<% end %> 

#layouts/_individual-post.html.erb 
<%= post.randomized_time %> 

오류 메시지

=> undefined method `randomized_time' for #<Fakepost:0x007f7752eeab58> 

그러나 <퍼센트 = post.created_at %의 같은 내 부분에서 잘 작동> 그래서 내가 호출 방법은 올바른 부분 내 생각?

+0

'Fakepost.joins (randomized_fakeposts)'는 Fakepost.joins (: randomized_fakeposts) 여야합니다. –

+0

아, 고마워. :) 오타가 수정되었습니다. (내 코드가 정확하기 때문에) . – OhDaeSu

+0

레일즈 콘솔에서 똑같은 방법을 사용할 수 있습니까? – angkiki

답변

0

좋아, 나는 오류의 원인을 발견하고 "외부인"에 대해서는 (전체 코드를 제공하지 않았으므로) 찾을 수 없었습니다. 내 FakepostsController.rb에서

는 또한 있었다 : 내 @pinned_fakeposts 내 "randomized_time"열 (나는 그것을 .joins하지 않았다)이 포함되지 않았기 때문에 오류가 발생

def index 
    # This line is the same line like in my original post 
    @fakeposts = Fakepost.joins(:randomized_fakeposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") 
    ... 
    # This was the line which causes the error: 
    @pinned_fakeposts = Fakepost.where(pinned: true) 
end 

.

그래서 내가 한 것은이었다

@pinned_fakeposts = Fakepost.where(pinned: true).joins(:randomized_fposts).where(randomized_fakeposts: {user_id: current_user.id}).select("fakeposts.*, randomized_fakeposts.randomized_time") 

결론

그래서 다른 모든 괜찮다고하고 당신의 부분 :)에 열을 가입 얻을 수 있습니다.

관련 문제