2014-01-17 10 views
1

새로운 레일스에 Im, 비디오 모델, 컨트롤러 및보기가있는 앱이 있습니다.NoMethodError in Welcome # 색인

내가 동영상을 쿼리하고 표시하는 방법을 알아 냈어. 지금까지 비디오 컨트롤러를 사용하고 있었을 때.

나는 주중 가장 중요한 비디오를 표시하고자하는 홈페이지를 가지고 있으므로 자습서에 색인 액션이있는 환영 컨트롤러를 만들었습니다. 환영 컨트롤러 내부

나는이 :

class WelcomeController < ApplicationController 

     def index 
     @highlighted_video = Video.where("highlight = true") 
     end 

    end 

하이라이트 부울 속성입니다. 그리고 인덱스보기 :

<iframe width="100%" height="315" src="<%= @highlighted_video.url %>" frameborder="0" allowfullscreen></iframe> 

하지만 다음과 같은 오류가 (URL 내 DB에있는 다른 비디오 속성입니다) :

 undefined method `url' for #<ActiveRecord::Relation::ActiveRecord_Relation_Video:0x2507760> 

난이 비디오 컨트롤러와 같이 작업 한 것이라고 생각하지만, 그것을 제발 도와주세요.

+1

하이라이트 값이 true 인 첫 번째 레코드를 가져 오려고합니까? – suren

답변

0

당신은 내가 마른 내 컨트롤러를 유지하는 것입니다 당신이 index.html.erb

<% @highlighted_video.each do |video| %> 
    <iframe width="100%" height="315" src="<%= video.url %>" frameborder="0" allowfullscreen></iframe> 
    <% end %> 
+0

저는 하나의 비디오를 찾고 있습니다 만, 지금은 배열이 어디인지 알 수 있습니다. FIND 방법을 사용하면 어떨까요? – user3099920

1

video

def index 
    @highlighted_video = Video.where("highlight = true") 
    end 

의 배열을이 변수에 @highlighted_video
url 방법을 호출 할 수 없습니다 . 내가 강조 첫 번째 레코드를 반환하려면 가정, 나는 Video 모델에 scope를 추가 :

class Video < ActiveRecord::Base 
    # ... 
    scope :highlighted, -> { where(highlight: true).first } 
    # ... 
end 

이 강조되고 기록을 반환합니다. 그런 다음 컨트롤러에 난 그냥 할 것이다 :

class WelcomeController < ApplicationController 

    def index 
    @highlighted_video = Video.highlighted 
    end 

end 

는 그런 다음보기에서 코드는 모델의 #url 방법을 정의 여겨 잘 작동합니다.

+1

그것은 매력처럼 작동했습니다! 나에게 마스터를 가르치십시오 – user3099920

+0

@ user3099920 듣기 좋다! 문제를 해결 한 경우 * 답변 *을 수락 할 수도 있습니다. :) – Agis

1

당신이 첫 번째 레코드와 일치하는 검색어에 대한 기록이없는없는 경우, @highlighted_video 인스턴스 변수의 속성에 액세스 할 때이

@highlighted_video = Video.where("highlight = true").first 

조심하려고려고하는 경우, 그것은 전무를 반환합니다 값, 어디 클래스에 대한 URL을 정의되지 않은 메서드 URL을 얻을 것이다.