如何干掉涉及视图代码的控制器代码?

时间:2012-08-29 11:33:04

标签: ruby-on-rails ruby-on-rails-3 refactoring

在我的Rails 3应用程序中,我有许多带有布尔字段disabled的模型。在这些模型的控制器中,我使用自定义操作disable来使用Ajax切换disabled字段。

示例(对于客户),

# routes.rb
resources :clients do
  member do
    get :toggle_disable, to: 'clients#disable', as: :disable
  end
end

# clients_controller.rb
def disable
  @client = Client.find(params[:id])
  @client.update_attribute :disabled, !@client.disabled
  render 'clients/update_client', format: :js
end

# update_client.js.erb
$('#client-<%= @client.id %>-details').html("<%= escape_javascript(render 'clients/client', client: @client) %>");

我的应用程序中至少有十个资源的代码。

问题

如何动态删除此代码并动态添加这些布尔字段的操作?我本可以创建父控制器或模块,但我不确定如何处理视图代码。

我应该可以做这样的事情

#clients_controller.rb
class ClientsController < ApplicationController
  add_toggle_action :disable
end

1 个答案:

答案 0 :(得分:0)

分享方法的两种主要方式:

  • 继承:在ApplicationController

  • 中定义您的操作
  • mixins:在模块中添加您的方法并将模块包含在适当的控制器中

由于你只想要一些控制器来获取方法,我将转向mixin。

您的控制器操作必须使用具有完整路径的视图,而不是相对路径,例如:

render '/shared/clien/update', format: :js

最后,您必须定义所有路线。