Rails:我应该如何在控制器之间共享逻辑?

4
这个问题可能已经被问过了,但我找不到它。
我有一个“UsersController”和一个“Admin::UsersController”。显然,在这些类中发生的许多事情(例如实现“strong_parameters”,创建/编辑用户后要遵循的路径)都是相同的。
我可以 - 甚至应该? - 在这些控制器之间共享代码吗?这就是关注点吗?我在网上找到的示例往往与模型打交道。
非常感谢任何指导。

1
它们真的会是一样的吗?管理员可以像普通用户一样编辑相同的字段列表吗?他们会重定向到同一个地方吗?似乎逻辑上,用户在编辑自己后会重定向到他们的个人资料,而管理员会重定向到用户列表。 - sevenseacat
@sevenseacat,从长远来看,可能不会。但现在共享strong_params很有用,因为模型级别上没有attr_accessible了,如果我理解正确的话。 - djb
2个回答

13

使用concerns(放在app/controllers/concerns目录下)

module UsersControllable
  extend ActiveSupport::Concern

  def new
  end

  def create
  end

  private
  def user_params
    # strong params implementation
  end
end

class UsersController < ApplicationController
  include UsersControllable
end

class Admin::UsersController < ApplicationController
  include UsersControllable
end

0

一种方法是使用继承。创建一个新的控制器:

class SharedUserController < ApplicationController
  # With shared code
end

然后:

class UsersController < SharedUserController
end

class Admin::UsersController < SharedUserController
end

希望这能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接