我在Rails 5.0上。 在那里创建新的控制器并添加越来越多的代码我发现在每个类的私有部分中我有很多相同的方法,比如
private
def find_post
@post = Posts.find(params[:id])
end
def find_user
@user = User.find(params[:id])
end
def find_group
...
end
等等。
有没有办法在需要它的所有类中包含一组“标准”私有方法?
答案 0 :(得分:3)
您可以在控制器中使用concerns,就像在模型中一样。
只需在Finders
然后app/controllers/concerns/finders.rb
中定义名为include Finders
或其他内容的关注点即可使用它。
另请注意,由于Ruby 2.0 def
实际上返回带有方法名称的符号,因此可以执行以下操作:
private def find_post
@post = Posts.find(params[:id])
end
private def find_user
@user = User.find(params[:id])
end
虽然这确实导致了更多的输入,但它比类级访问修饰符更明确,更不容易出错。
答案 1 :(得分:0)
您是否可以使用受保护的方法继承父控制器?
class PostParentController < ApplicationController
before_filter :find_user # might be a different method name in Rails 5
before_filter :find_post
protected
def find_post
@post = Posts.find(params[:id])
end
def find_user
@user = User.find(params[:id])
end
end
子类:
class PostChildController < PostParentController
def show
end
def create
end
# etc
end