2009-09-04 7 views
8

의 내가이 한 가정 해 봅시다 :레일의 뷰에서 메서드를 어떻게 호출합니까?

스크립트를/컨트롤러 홈을 생성

그리고 홈 컨트롤러의

는 ..
def say 
    puts "You are here" 
end 

가 어떻게이 된 index.html에서 그 방법을 메서드를 호출 것이라고했다 .erb?

루비를 배울 때 터미널에서 whatever.rb를 실행하면 방금 파일에서 작성한 코드가 실행됩니다. 그냥 레일과 함께 작동하는 방법 에 궁금해. 우선

답변

16

레일 서버가 작동하고 있다고 가정합니까?

는 두 가지 가능성을 Theres는, 첫째로 당신은 사용하여 컨트롤러의 도우미 메서드 말을 만들 수 : 컨트롤러에서

helper_method :say 

합니다.

더 좋은 해결책은 say 메서드를 home_helper (?). rb 도우미 파일로 옮기는 것입니다.

당신은보기 파일에서 < % say %>를 사용하여 이것을 호출 할 수 있습니다.

puts은 문자열에 STDOUT을 넣지 않고보기에 출력하지 않는다는 점에 유의하십시오. 약간의 텍스트를 쓰고 싶다면 erb를 사용하는 것이 더 좋을 것입니다 보기에서 출력 메커니즘

application_helper.RB

def say 
    "hello" 
end 

index.html.erb

<%= say -%> 

둔다는 객체의 내용을 알아 싶어 단위 테스트 디버깅에 매우 유용

puts @some_object.inspect 

당신이 출력하려면 반면 로그에 다음과 같이 할 수 있습니다.

logger.error "hello" 
+0

나는 application_helper.rb에 넣고 <%= say -%>으로 부를 때 어떤 이유로 작동시키지 못했습니다. 나는 컨트롤러의 상단에 "helper_method : say"를 추가하고 등호와 함께 <%= say %>으로 호출하면 제대로 작동하도록했습니다. 나를 좋은 방향으로 가리켜 줘서 고마워. – Aaron

0

당신은 레일 응용 프로그램을 실행해야

당신은 당신이

ruby script/server 

를 입력 명령 줄에서 레일 응용 프로그램 루트 디렉토리를 이동하여 다음 브라우저를 열고 http://127.0.0.1:3000/home/say

을 입력 그렇게

이 컨트롤러의 집에 당신을 가리켜 야, 액션

편집 말 : 사람들의 나머지 말했듯이 내가 깜빡 예를 들어 app/views/CONTROLLER_NAME/ACTION_NAME.html.erb 아래에있는 관습에 따른 파일이 app/views/home/say.html.erb 인 경우) 해당 파일이 없으면 작업이 표시되지 않고 오류가 발생합니다.

3

간단히 말해서 : 그렇게하지 마십시오.

당신이하는 일은 다음과 같습니다 :
컨트롤러에 작업을 호출합니다. 각 액션에는 해당보기가 있습니다 (예 : "say.html.erb"디렉토리보기/home에 있습니다.
, 당신은 너무과 params[:someadditionalparameter]을하고 것 것입니다, 당신은 say 행동에 :someadditionalparameter에 액세스하고 싶었다면 당신이 당신의 index.html.erb

<%= link_to 'Say it', :controller => 'home', :action => 'say', :someadditionalparameter => 'foo' %> 뭔가를 할 수있는, 해당 작업을 호출하고 해당보기를 표시하려면 이 경우 'foo'을 얻으십시오.

1

글쎄,보기는 일반적으로 컨트롤러를 호출하지 않습니다 - 그것은 내가 아는 것에서 다른 방향으로 진행됩니다. 요청은 들어오고, Rails는 config/routes.rb 경로에 따라 URL을 구문 분석하고 요청을 해당 컨트롤러의 적절한 작업으로 전달합니다. 기본적으로 Rails는/controller_name/action_name에 대한 경로를 제공하므로 레일스가 당신을 위해하는 일을 간단히 처리 할 수 ​​있습니다.

컨트롤러가 실행 된 후 규칙에 따라 동작과 동일한 이름을 가진 관련 뷰가 자동으로 렌더링됩니다. '홈'컨트롤러의 'say'동작에 대한 자동 사용보기는 app/views/home/say.html.erb의 디렉토리 구조에서 찾을 수 있습니다. 컨트롤러 동작에서 render을 호출하여이 자동 뷰 렌더링을 무시할 수 있습니다 (예 : render :template => :index).

마지막으로 Konstantinos와 마찬가지로 웹 브라우저에서 사이트를 탐색하기 전에 서버를 시작해야합니다. 기본적으로 http://127.0.0.1:3000/에 있습니다. 가정용 컨트롤러의 말 액션에 도달하려면 http://127.0.0.1:3000/home/say으로 가야합니다.

관련 문제