2012-12-20 4 views
1

A는 예를 들어, 내 관리자 네임 스페이스레일 기본 ​​컨트롤러 일반 매개 변수

class Admin::AdminController < ApplicationController 

    def update 
    entity = @source.find(params[:id]) 
    close_popup entity.update_attributes(params[@param_name])? {return_url => @url}:{} 
    end 

    ... 

end 

그리고 내 모든 관리 컨트롤러 AdminController에서 파생를위한 기본 컨트롤러가 : 이제

class Admin::ProductsController < Admin::AdminController 
    @source = Admin::Product 
    @url = admin_products_url 
    @param_name = :admin_product 
end 

을, 내 질문에 내가 어떻게 할 수 있습니다 derrived 클래스에서 이러한 매개 변수를 설정하지 마십시오. 그것을 위해 나는베이스 컨트롤러 자체로부터 알 필요가있다.

  1. 어떤 비계와 연관되어 있는가? (@source)
  2. 당신이 모든 것을 확인 기관에게 (@url) 엔티티 (@param_name)에 관련된 POST에서 오는
  3. 매개 변수 이름

감사

답변

2

목록의 URL을하다 잘 경우

set_default_parmas를라는 class Admin::AdminControllerbefore_filter을 정의 :이 컨트롤러는 다음 작업을 수행 할 수 있습니다, 당신이 언급 한 형식이됩니다 사용 방법에
class Admin::AdminController < ApplicationController 
    before_filter :set_default_params 

    def set_default_params 
    resource_name = controller_name.singularize 
    @source = "Admin::#{resource_name.camelize}".constantize 
    @url = self.send("admin_#{controller_name}_url") 
    @param_name = "admin_#{resource_name}".to_sym 
    end 

end 

참조 : singularize, constantize, camelizecontroller_name

+0

나는 있도록 url' 원하는 경로를해야합니다 @'('self.send'를 사용) 대답을 편집했다. 'resource_name undefined' 줄은 무엇입니까? – Khaled

+0

고마워. 그것은 작동합니다. – Alex