2012-04-24 4 views
1

저는 Ruby-On-Rails에서 작은 응용 프로그램을 개발하고 있습니다. 보기에서 컨트롤러의 메서드를 호출하고 싶습니다. 이 메소드는 데이터베이스 테이블에 일부 삽입 만 수행합니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 나는 이런 식으로 뭔가를 시도했다하지만 분명히 방법의 코드가 실행되지 않습니다보기에서 컨트롤러의 메서드를 호출하는 방법?

<%= link_to 'Join', method: join_event %> 

답변

5

LINK_TO 메서드 호출 방법 옵션은 실제로 HTTP 방식이 아닌 액션의 이름입니다. RESTful 라우팅은 DELETE 메소드를 사용하여 destroy 액션을 수행하므로 HTTP 삭제 옵션을 전달할 때 유용합니다.

여기서해야 할 일은 작업을위한 경로를 설정하는 것입니다. 이 join_event을라고 가정 할 때, 당신의 routes.rb에 다음을 추가

match '/join_event' => 'controllername#join_event', :as => 'join_event' 

사용중인 컨트롤러의 이름으로 컨트롤러 명을 변경해야합니다. 다음과 같이보기를 업데이트하십시오.

<%= link_to 'Join', join_event_path %> 

_path 메서드는 routes 파일의 as 값을 기반으로 생성됩니다.

코드를 구성하려면 삽입을 정적 모델 방법으로 캡슐화해야 할 수 있습니다. 당신의 이름의 열이 MyModel라는 모델을 사용한다면, 당신은 할 수

class MyModel 
    # ... 
    def self.insert_examples 
    MyModel.create(:name => "test") 
    MyModel.create(:name => "test2") 
    MyModel.create(:name => "test3") 
    end 
end 

그럼 그냥 통해 행동을 실행합니다 agmcleod의 대답에 추가

MyModel.insert_examples 
+0

답장을 보내 주셔서 감사합니다. 매우 도움이되었습니다 :) 단추에 양식을 표시하고 양식 필드를 기반으로 데이터베이스에 삽입을 수행하려면 어떻게해야합니까? – notGeek

+0

사용자 입력을 받아들이려면 a) 모델 설정, b) 해당 모델에 대한 데이터베이스 마이그레이션 실행, c) 컨트롤러 및 뷰 설정을 지원하는 것입니다. 실제로 시작 가이드 : http://guides.rubyonrails.org/getting_started.html#getting-up-and-running-quickly-with-scaffolding을 통해이 단계 중 일부를 설명해 드리겠습니다. 아마 책에 투자하기를 원한다면, Rails 3 in Action을 확인해보십시오. – agmcleod

4

, 당신이 컨트롤러 메소드를 노출 할 수 있습니다 이 INTE는 이후

class EventsController < ApplicationController 
    helper_method :join_event 

    def join_event(event) 
    # ... 
    end 
end 

그러나이 경우

, 나는, 당신이 그의 조언을 다음과 모델 층에이 방법을 이동 떨어져 가장 좋은 것 같아요 : ActionController::Base::helper_method로보기에 데이타베이스로 맹금류.

+0

정말 그렇게하지 말아야합니다. 컨트롤러가 메소드에 대해 알도록하는 것이 이상적 일 수 있지만 그 외의 것은 없습니다. – agmcleod

+2

@agmcleod 나는 동의하지 않습니다. 세션 데이터에 의존하는'logged_in? '컨트롤러 메소드는 뷰 레이어에서 매우 유용합니다. 대부분의 경우와 마찬가지로, 언제 사용해야하는지, 언제 악용 할지를 알아야합니다. – Brandan

관련 문제