1

필자에게 더 분명해야 할 문제가있는 것 같습니다. 관련 모델의 특정 속성을 뷰에 표시하려면 어떻게해야합니까? 내가 이동하고있어 정확한 코드를 사용할 수없는 동안이 쓰고 있어요레일 : 관련 모델에서 속성을 가져 오는 방법은 무엇입니까?

제품
product_images

:

내 응용 프로그램에서이 두 모델이 있습니다. 그러나 나는 필요한 제품을 만들어서 제품 has_many product_images와 product_image belongs_to 제품을 만들었다. 이미지 모델에는 URL, 기본 (부울) 플래그 및 물론 product_id가 있습니다.

제품 색인보기에서 해당 제품의 기본 이미지를 표시하고 싶습니다. 단순함을 위해서 처음 사진을 보여 주면 좋겠다고 가정하겠습니다. 일단 작동하면 조건을 쉽게 소개해야합니다. 내 제품 색인보기에 따라서

은 (단지 메모리에서 다시)이 같은있다 :

@products.each do |p| 
    <h3><%= p.name %></h3> 
    <%= image_tag p.product_images.first.url %> 
    <p><%= p.description %></p> 
end 

잘 빨리 제품 만 표시의 설명과 이름 난 IMAGE_TAG 내보기를 포함로 동안 url이 Class Nil에서 정의되지 않은 메서드임을 나타내는 NoMethodError로 중단됩니다. 이미지 태그를 없애고 단락에 인쇄 된 URL을보고 싶었습니다. 문제는 물론 남아 있습니다. 방금 ​​p.product_images.first을 얻으려고하면 뷰가 인쇄합니다. 객체/모델에 대한 ID 일종의 것으로 가정합니다. 이는 연관 자체가 괜찮음을 나타냅니다. 그렇다면 Rails는 url 속성이 메소드라고 생각하는 이유는 무엇입니까?

또한 레일스 콘솔을 사용하여 관련 속성을 검색하는 올바른 구문인지 확인했습니다. 같은 (다시, 메모리에서 - 가능한 구문 오류가) : 당신은 지금 말할 수

p = Product.first 
=> [successful - shows the first product] 
p.product_images.first 
=> [successful - shows the first image model] 
p.product_images.first.url 
=> [successful - shows me the single attribute, the url to the image] 

나는이 아주 새로운 해요 여러분의 도움이 아주 많이 감사합니다. 물론 Rails 문서를 읽었지 만 Active Record Query Guide는 주로 현재 모델에서 데이터를 가져 오는 데 중점을두고 있으며 필자의 샘플 앱에서 내가 누락 된 부분을 찾을 수 없었습니다.

콘솔에서 볼 수 있지만보기에서는 작동하지 않는 이유는 무엇입니까?

답변

1

아마도 Product 중 하나에 ProductImage이 없기 때문일 수 있습니다. 과 같이보기에서 호출 한 후

def product_image(product) 
    return if product.product_images.blank? 

    image_url = product.product_images.first.url 
    return if image_url.nil? 

    image_tag(image_url).html_safe 
end 

을 그리고 :

당신은 너무처럼 ProductsHelper의 방법을 추가하여이 문제를 해결 할 수 실제로

@products.each do |p| 
    <h3><%= p.name %></h3> 
    <%= product_image(p) %> 
    <p><%= p.description %></p> 
end 
+0

. 아직 모든 제품에 대한 이미지를 설정하지 않았습니다. 나는 이것을 레일의 기본 동작으로 기대하지 않았다. 그렇다면 빈/비어있을 수있는 모든 관련 모델에 대해 비슷한 도우미 메서드를 도입해야한다는 뜻입니까? 나는 has_many가 관련 모델을 가지고 있지 않은 경우를 다룰 것이라고 생각했다. – thirdsun

+0

'has_many'는 자식이 없을 때 컬렉션을'[]'로 설정합니다. 빈 아이들 콜렉션에서'.first'를하면,'nil'을 얻습니다. 그러면'nil.url'이 호출 될 때 문제가됩니다. 'has_many'가 어떻게이 문제를 해결할 수 있었는지 확실하지 않습니다. – pungoyal

+0

@thirdsun 귀하의 초기 문제가 해결되면 답을 올바르게 표시 할 수 있습니까? – pungoyal

관련 문제