2011-01-29 4 views
3

:아직도 RoR에 MVC 접근 방식 힘든 시간을 보내고 내가 내가 내가 무슨 짓을했는지으로 지금까지뿐만 아니라 알고 생각하는 상태로 정의를해야 가정

1) 나는 응용 프로그램을 만들어 내 첫했다 데이터베이스 마이그레이션; 내 개발자, 테스트 및 프로덕션 데이터베이스를 알고 있습니다. dev db에는 'wines'라는 테이블이 있습니다.

2) 필자는 필요한 파일을 만든 비계를 만들었습니다.

3) 기본 색인/업데이트/삭제 방법이 설정되어 있으며 페이지를 탐색 할 수 있습니다.

4) 내가 수집 한 것으로부터 ActiveRecord 클래스 "Wine"이 데이터베이스의 속성을 자동으로 상속합니까? 각 열은 속성이며 'wine'테이블의 각 행은 wine_controller 스크립트에서 호출되는 잠재적으로 인스턴스화 된 객체입니다.

지금 문제는 모든 컨트롤러에서 사용하는 공통 레이아웃을 만들고 싶다는 것입니다. 변경되는 유일한 사항은 페이지 제목이며, < 링크에 > 태그가 있고 < 본문 > 속성 (javascript onload 이벤트가 가장 많음)과 < 본문 > 태그 안에있는 태그가 있습니다.

"favicon_link_tag", "stylesheet_link_tag"및 "auto_discovery_link_tag"와 같은 원하는 기능을 수행하는 기능을 찾고 있지만 찾을 수없는 항목이 있습니다. 나는 이것이 사물이 어떻게 실행/상속되는지에 대한 나의 부족함과 관련이 있음을 안다. 예를 들어 application_controller.rb에서 @pageTitle을 선언하고 ApplicationHelper에서 @pageTitle을 사용하면 작동하지 않습니다. 또는 심지어 application_controller.rb에서 "stylesheet_link_tag"를 사용하면 오류가 발생합니다. 나는 무언가를 얻지 못하고있다.

각 항목은 연대순 실행, 범위 등의 관점에서 서로 어떤 관계가 있습니까?

답변

5

"app/views"디렉토리에는 "레이아웃"이라는 폴더가 있습니다. 기본적으로 거기에 "application.html.erb"파일이 있어야하지만 그렇지 않으면 만들 수 있습니다.

"응용 프로그램"레이아웃 파일은 모든보기에서 사용되는 기본 레이아웃 파일입니다. 그러나 특정 컨트롤러가 다른보기를 사용하게하려면이 설정을 덮어 쓸 수 있습니다. 이 railscast을 참조하십시오. this one도 도움이됩니다.

중요한 점은 응용 프로그램 레이아웃에 yield 메서드가 나타날 때마다 특정보기의 콘텐츠가 표시된다는 것입니다. 메인 'yield'블록은 컨트롤러 액션에 의해 지정된 뷰 파일을 얻지 만, 다른 뷰 내에서 아무것도 표시하지 않고 다른 yield 블록으로 전달할 수 있습니다. 예를 들어, "title"예제는 애플리케이션 레이아웃의 머리에 전달 될 수 있습니다. 자세한 예제는 railscast을 참조하십시오.

더 많은 정보를 얻으려면 Rails Guide을 읽고, Rails 스타터 북을 선택하는 것이 좋습니다.

프레임 워크에 대한 놀라운 소개였던 "Beginning Rails 3"이 내 발에 젖었습니다. 그 책을 가지고 며칠 만에 나에게 의미가 있었고, 이전보다 더 빠르게 발전하고있었습니다. 레일스는 일단 알게되면 바위가 되겠지만, 확실히 책을 읽는 것이 좋습니다.

내가 제어 흐름에 대한 질문에 대답하기 위해

-EDIT-을 :) 수 있다면 내가 도와 줄게, 질문을 계속하십시오, 그것은 기본적으로 다음과 같이 작동

  1. 브라우저가 전송 특정 URL에 대한 GET 요청

  2. 라우터는 요청을 받아 컨트롤러 작업과 일치시키고 해당 컨트롤러 작업을 트리거하며 컨트롤러에 요청과 관련된 모든 매개 변수를 제공합니다. 예를 들어, example.com/posts/123?color=red을 요청하면 posts_controllerSHOW 작업이 실행되고 {: color => 'red'}가 params 해시로 전달됩니다. params[:color]

  3. 컨트롤러 동작은 작업을 수행하고 완료되면 출력을 렌더링합니다. 기본적으로는보기가 app/<controller_name>/<action_name>에 위치한 어떤 렌더링 및 중 파일 의지 <action_name>.js.erb를 실행할 것, 즉 Ajax 요청 요청에 적합한 확장 (일치하고 GET 요청은 <action_name>.html.erb을 트리거한다.

    • 당신은 사용하여이를 대체 할 수 있습니다 render 'foo/bar'을 전달하여 예를 들어 render 방법은 FooController에 대한보기, 대신 현재의 액션의 바 액션을 사용하여 렌더링합니다. 상관없이 렌더링 무엇인지, 뷰에 사용할 수있는 데이터가 특정에 무엇이든 없습니다

    • 주 컨트롤러 동작이 아닌 라우터가 트리거 한 컨트롤러 동작 '일반적으로'그 견해를 렌더링합니다.

  4. 뷰 파일은 호출 한 컨트롤러의 데이터를 사용하여 구문 분석됩니다. content_for 메서드가있는 경우 content_for 블록 안에있는보기 코드는 사용자가 지정한 곳으로 이동합니다. 그렇지 않으면 다른 모든 요소가 application 레이아웃 (또는 컨트롤러가 지정한 레이아웃)의 기본 YIELD 블록으로 이동합니다.

  5. 응용 프로그램 레이아웃이 구문 분석되고보기의 내용이 해당 영역에 삽입됩니다.

  6. 페이지가 사용자에게 제공됩니다.

몇 가지면에서 단순화되었지만 귀하의 질문에 대한 답변이라고 생각합니다. 다시, 계속 묻고있어 주시기 바랍니다 :)

+0

방금 ​​좀 더 자세히 질문하여 편집을 마쳤습니다 ... 길을 더 자세히 편집하십시오 ... – Andrew

+0

나는 당신이 진술 한 것에 대해 많이 이해하고 있으므로, 내 문제를 좀 더 간결하게하려고 노력해야한다. 컨트롤러가보기에 양보를 올바르게 보냅니 까? 그런 다음 application_helper가 컨트롤러와 뷰 사이의 중개자입니까? 도우미의 기능은 무엇입니까? 헬퍼/컨트롤러와 관련하여보기에 어떤 변수/메소드가 있습니까? – JakeTheSnake

+0

도우미 파일은 뷰가 필요할 수도있는 커다란 지저분한 기능을 붙잡기위한 장소 일 뿐이므로 사용자가 "디자인"코드에서 벗어날 수 있습니다. 도우미 파일은 자동로드되는 뷰의 이름을 따서 지정되므로 한 뷰 집합에서만 사용되는 함수를 가질 수 있으며 ApplicationHelper를 사용하여 모든 뷰에서 함수를 사용할 수 있습니다. 컨트롤이 도우미 파일을 "통과"하지 않습니다. – Andrew

관련 문제