如何编写通用Rails CRUD控制器

时间:2013-06-10 19:30:44

标签: ruby-on-rails-3.2

我有两个基本相同的控制器,我正在尝试整合/“干”/重构/或其他什么。我搜索并找到各种解决方案,但似乎无法实现其中任何一种。

要合并的两个控制器的示例代码:

class ClientsController < ApplicationController
  before_filter :signed_in_user, only: [:show, :index, :edit, :update]

  def update
    @client = Client.find(params[:id])
    if @client.update_attributes(params[:client])
      flash[:success] = "Client updated"
      redirect_to @client
    else
      render 'edit'
    end
  end

end

class ItemCatsController < ApplicationController
  before_filter :signed_in_user, only: [:show, :index, :edit, :update]

  def update
    @item_cat = ItemCat.find(params[:id])
    if @item_cat.update_attributes(params[:item_cat])
      flash[:success] = "Item Category updated"
      redirect_to @item_cat
    else
      render 'edit'
    end
  end
end

我怀疑我需要做的是创建一个超级控制器,但我一直在寻找一种通用的方式来引用模型。 任何帮助将不胜感激。

注意:我真的想避免添加任何额外的宝石/插件来使它工作;我更喜欢“手动”/非魔法解决方案,这样我才能理解究竟发生了什么。

1 个答案:

答案 0 :(得分:1)

如果您愿意使用宝石,请查看inherited_resources。除此之外,我建议保持原样。我不太可能通过尝试删除这些小样板来获得更好的代码。如果你对这个宝石的代码有所了解,你会发现涉及到相当多的魔法 - 我怀疑一个自制的解决方案将为你留下更多的代码行和更复杂且容易出错的代码然后你现在拥有