什么样的逻辑应该在Rails之前过滤器
我应该在过滤器之前加载并检查数据库源的存在吗?什么样的逻辑应该在Rails之前过滤器
在我们的应用程序中,我们总是加载并检查具有由params传入的id的DB源的存在。我不确定这是否是一个好的模式。
喜欢:
before_action :set_org
private
def seg_org
@org ||= Organization.find params[:id]
resource_not_found unless @org
end
是,找到一个记录并将其设置为一个实例变量是用于控制器的过滤器的常用约定。一般来说,任何可以运行多个操作的代码都是很好的选择。说你要重定向到登录页面,如果当前用户没有登录。
class UsersController < ApplicationController
before_action :require_login
before_action :set_user, only: [:show, :edit, :update, :destroy]
private
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
def set_user
@user = User.find(params[:id])
end
end
为什么这是downvoted? –
我不知道是谁做的。 :) 任何方式,我投你回来。 – hiveer
@hiveer lol thanks:)当某些事情被拒绝投票时,我们很高兴得到一个评论,所以可以改进。我觉得这是一个合理的答案,所以我只是困惑。这个答案有帮助吗? –
不['find'(http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods。 html#method-i-find)已经引发错误?在这种情况下,你的'resource_not_found'根本不会被执行。所以最好删除它。 – vee
这实际上是如何[rails scaffold generator](https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/scaffold_controller/templates/controller.rb)设置控制器默认情况下(第7和55行)。所以这是一个相当不错的标志,如果没有别的东西,这不是一个可怕的想法或做事的方式 –
@vee'find'不会产生任何错误。如果没有发现,它将返回'nil'。 – hiveer