2010-06-15 2 views
1

newb로서 "home inventory"어플리케이션을 구축하기로 결정했습니다. 지금은 프로그래밍 방식으로 브라우저에서 볼 때 어떤 유형의 항목을 기반으로 레이아웃을 선택하는 방법에 집착하고 있습니다.여러 레이아웃의 레일 [Newbie Q]

내 계획에 따르면, 지금까지 내가 내 집에서 찾을 수있는 항목의 유형을 나타내는 몇 가지 모델을 만들었해야합니다 가구, 전자.

class Book < ActiveRecord::Base 
end 

class Furniture < ActiveRecord::Base 
end 

class Electronic < ActiveRecord::Base 
end 

이제 모델은 ISBN, 페이지, 주소카테고리 같은 것들이있다. 가구 모델은 색상, 가격, 주소카테고리 같은 것들이있다. 전자이름, 전압, 주소카테고리 같은 것들이있다.

여기 내가 혼란 스럽습니다. 나는 재산이 모두를 위해 동일 할 것이라는 점을 안다. 또한 알맞은 그래픽과 스타일 시트를 사용하여 해당 항목의 여러 속성을 표시하는 3 가지 유형의 항목에 대해 여러 개의 "레이아웃"을 만들어야합니다.

하지만 렌더링 할 레이아웃을 결정할 수 있도록 항목의 카테고리를 결정하는 방법은 무엇입니까?

class DisplayController < ApplicationController 
def display  
    @item = Params[:item] 
    if @item.category = "electronics" 
    render :layout => 'electronics' 
    end 
end 

내 routes.rb에서

map.display ':item', :controller => 'display', :action => 'display' 
나는 단지이 하나 관심을 갖고있는 것 같다

, 나는 아마를 추가합니다 :

날에 따르면, 이것은 내가 그것을 할 방법입니다 나중에 많은 범주를 다루고 하드 코딩보다는 다루기 쉬운 방식으로 다루어야한다고 생각합니다.

특정 카테고리에 대한 관련 정보를 표시하려면 레이아웃 html 태그를 추가해야한다는 것을 알고 있습니다.

---- 질문 ----

  1. 는 이러한 유형의 문제에 접근이 올바른 방법입니다.
  2. 검색을 실행하려면 thinking_sphinx과 같은 보석을 추가하기로 결정할 때이 방법이 호환 가능합니까?
  3. 내 접근 방식에서 어떤 문제점이 있는지, 어떻게 개선 할 수 있습니까?
  4. "Polymorphic Assoc"에 대한 내용을 읽었습니다. 모든 항목에 범주가 있으므로이 경우에도 적용됩니까?당신이 2 ~ 3 개 카테고리이있는 경우

또한, 나는 경로가 같은 URL을 렌더링하려고 노력했다 "http://localhost/living-room-tv는"

답변

1

정확하게 이해하면 원하는 레이아웃이 다릅니다. 당신이 원하는 것은 다른 템플릿입니다.

레이아웃은 전체 페이지의 일반적인 구조를 의미하며, 일반적으로 전체 프로젝트에서 일반적으로 사용되거나 프로젝트 당 2-3 개의 레이아웃을 사용하게됩니다. (사이트 전체 레이아웃, 관리자 레이아웃 및 기타 특정 레이아웃).

언급 한 것은 책, 가구 및 전자 제품의 다양한 속성을 보여주는 다른 템플릿을 원한다는 것입니다.

뷰 파일 app/views/display/furniture.html.erb를 만들고 책 및 전자 제품에 대한 파일을 만들고 render :layout 대신 render :template => 'furniture'을 사용하여 렌더링합니다.

이제 서로 다른 범주간에 공통 정보가있는 경우 공통 부분 만 포함하는 부분을 만드는 것이 좋습니다. 예를 들어 부분적인 app/views/shared/address.html.erb를 만들고 furniture.html.erb 안에 render :partial => '/shared/address', :locals => {:address => @item.address}을 작성하면됩니다.

이렇게하면 뷰 로직을 가능한 한 건조하게 유지하면서 모든 범주에 대해 사용자 지정 템플릿을 유연하게 만들 수 있습니다.

+0

예. 그것은 내가 실제로 염두에 두었던 것입니다. 지금해야 할 일을 이해합니다. 내가 다시 붙어서 도움을 요청해도 괜찮 으면 좋겠어요. 그때까지, 나는 그것을 '템플릿'방식으로 구현하려고 노력할 것이다. 다시 한번 감사드립니다. – BriteLite

+0

스택 오버플로가 무엇인지 물어보십시오. – Faisal

1
  1. 아마 이것은 올바른 방법입니다. 시스템이 성장하려면 구현을보다 유연하게 만들고 싶을 것입니다.

  2. 검색시 어떤 문제가 예상되는지 잘 모릅니다. 가장 좋은 방법은 검색 결과 페이지에 여러 종류의 항목이 있으므로 나머지 부분을 렌더링하기 만하면됩니다.

  3. 제가 말했듯이, 다양한 카테고리에 대한 지원을 추가하는 것은 현재의 접근 방법으로 지루할 수 있습니다. 나는 두 가지 (반드시 상호 배타적이지) 제안 할 수 있습니다 : 레이아웃에 카테고리 이름을 연결하기위한

    • 사용 컨벤션 (예를 들어 카테고리 '전자 제품'electronics 레이아웃을 통해 렌더링됩니다). 시스템을 확장하고 향상 시키면이 코드는 render :layout => @item.category이 될 수 있으며이 코드는 새로운 카테고리 추가
    • 으로 추가되므로 카테고리에 대해 완전히 새로운 모델을 도입해야 할 수도 있습니다. 지금 당장 생각해보십시오. 아마 지금 당장 이걸하고 싶을 것입니다.
  4. 다형성 연관은 다른 것입니다. 이들 모델에는 두 가지 모델이 있어야하며 현재 하나만 가지고 있습니다. Rails Guides, 2.9을 참조하십시오.

그런데 전체 레이아웃이 카테고리별로 다른 이유가 확실하지 않습니다. 사이트의 전반적인 모양이 일관성이 있다면 다른 카테고리의 항목에 다른 부분을 추가하는 것이 더 적합 할 것입니다.

URL과 관련하여이 질문은 여러 번 제기되었습니다 (herethere).

+0

내가 Partials에 대해 읽은 모든 것을 위해, 그것은 내 마음을 완전히 미끄러 뜨 렸습니다. 부분보기 및 범주 모델에 대해 has_one : category로 수행 한 다음 거기에서부터 작업해야한다고 가정합니다. 그 동안 시도해 볼 것이고 필요할 경우 추가 도움을 요청할 것입니다. 고맙습니다. 중성미자! – BriteLite