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

现在,我的问题是如何避免在派生类中设置这些参数。为此,我需要从基本控制器本身了解

  1. 它与什么支架有关。( @来源 )
  2. 列出实体的 url (@url)
  3. 来自与实体关联的 POST 的参数名称 (@param_name)

谢谢

4

1 回答 1

2

好吧,如果您确定所有这些控制器都将采用您提到的格式,您可以执行以下操作:

before_filterclass Admin::AdminController命名中定义一个set_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

引用使用的方法: singularizeconstantizecamelizecontroller_name

于 2012-12-20T11:24:49.603 回答