1

管理者名前空間のベース コントローラーがある

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

さて、私の質問は、派生クラスでこれらのパラメーターを設定しないようにするにはどうすればよいかということです。そのためには、ベースコントローラー自体から知る必要があります

  1. それが関連付けられている足場は何ですか。( @ソース )
  2. エンティティを一覧表示するための URL ( @url )
  3. エンティティに関連付けられた POST からのパラメーター名 ( @param_name)

ありがとう

4

1 に答える 1

2

これらすべてのコントローラーがあなたが言及した形式であると確信している場合は、次のことができます。

名前付きで abefore_filterを定義するclass Admin::AdminControllerset_default_parmas

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

使用されるメソッドへの参照: singularizeconstantizecamelize、およびcontroller_name

于 2012-12-20T11:24:49.603 に答える