Rails基本控制器一般参数

时间:2012-12-20 11:14:08

标签: ruby-on-rails controller

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. 它与之相关的脚手架。 (@source)
  2. 列出实体的网址(@url)
  3. 来自与实体关联的POST的参数名称(@param_name)
  4. 由于

1 个答案:

答案 0 :(得分:2)

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

在名为before_filter

class 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