如果我对文章资源使用Rails脚手架生成器,它将创建一个前置过滤器和一个像这样的私有方法
# app/controllers/articles_controller.rb
before_action :set_article, only: [:show, :edit, :update, :destroy]
...
private
def set_article
@article = Article.find(params[:id])
end
现在我明白了这会让你的控制器干掉,因为你可以使用上面的代码而不是添加@article = Article.find(params[:id])
4次代码,你可以节省自己......好吧它仍然是4行和相似数量的击键。但是如果你想修改它,你只需要在一个地方进行修改。但是你牺牲了清晰度,因为要看到@article在这4个动作中被定义,你必须在顶部的过滤器前面看,然后在底部的私有方法,然后回到动作。对我个人而言,这没有任何好处,所以我总是把它放在四个动作中。我的问题是,这仅仅是个人偏好问题还是有令人信服的理由总是使用我没有看到的DRY方法?
答案 0 :(得分:0)
当检索的逻辑比一行更复杂时,它是非常有用的,但不是必要的任何方式。您也可以保留set_article
方法,删除before_action
并在需要它的操作中明确调用它,在before_action
之间进行权衡,并在所有方法中重复动作。当逻辑是几行代码而不是一行代码时,这非常方便。