Ruby on rails 不确定我是否在Rails中正确使用before\u filter/before\u action
我已经有一段时间没有使用Rails了,但我知道Rails附带了如下功能 应用程序\u控制器.rbRuby on rails 不确定我是否在Rails中正确使用before\u filter/before\u action,ruby-on-rails,ruby,Ruby On Rails,Ruby,我已经有一段时间没有使用Rails了,但我知道Rails附带了如下功能 应用程序\u控制器.rb before_filter :login_with_access_token helper_method :current_user 据我所知,before\u filter将在控制器中的每个操作之前运行aftersaid方法。考虑到这是应用程序控制器,它将在每次操作之前运行它,因为一切都继承自应用程序控制器。我猜helper\u方法是我们经常检查的方法,可以在视图中访问 我想我有点困惑的原因是
before_filter :login_with_access_token
helper_method :current_user
据我所知,before\u filter
将在控制器中的每个操作之前运行aftersaid方法。考虑到这是应用程序控制器,它将在每次操作之前运行它,因为一切都继承自应用程序控制器。我猜helper\u方法是我们经常检查的方法,可以在视图中访问
我想我有点困惑的原因是我不完全明白为什么我们需要helper\u方法
,除了您希望在视图中使用它们之外。例如,如果我只想检查一个人
模特是否是成年人。。。什么能说服人们选择一种helper\u方法
而不是行动方法
?前
def is_adult?
person.age > 18
end
这就是我在具体问题中感到困惑的地方。
只有选择了食品
对象,才能查看某些页面。意思是,我的路线:
get'/user/:user_id/food/:food_id',to:'units#display_user_food',as:'display_user_food'
我接着在过滤器之前添加了一个:用户\u有\u食物
def user_has_food
unless UserFood.where(id: params["user_id"]).empty?
true
else
unit_id = params["unit_id"]
false
puts "------------ User does not have food :("
redirect_to "/user/new-food/#{unit_id}"
end
end
但是。。。现在的问题是。。。我有一个很厚的控制器。。。有很多行动。。。如果它点击另一个动作,它就会失败,并且会尝试重定向我,因为用户\u has\u food
结果为false。看看这个。。。这似乎不对。正确解决这个问题的理想和最佳解决方案是什么
我想对/app/helpers文件夹做些什么,但我似乎找不到关于如何使用它们的更新教程 您只能对某些特定控制器的操作调用before\u filter
,如下所示
before_filter :user_has_food, only: [:display_user_food]
在rails 5.0
中,before\u filter
已被弃用,您应该使用before\u action
。如果只有一个操作需要过滤,可以避免使用数组,请参阅下面的代码段
before_filter :user_has_food, only: :display_user_food
当您在before\u filter
中使用only
选项时,当请求用于其他操作时,它将忽略调用。您可以仅为某些特定控制器操作调用before\u filter
,如下所示
before_filter :user_has_food, only: [:display_user_food]
在rails 5.0
中,before\u filter
已被弃用,您应该使用before\u action
。如果只有一个操作需要过滤,可以避免使用数组,请参阅下面的代码段
before_filter :user_has_food, only: :display_user_food
当您在过滤器之前使用中的仅选项时,当其他操作的请求到来时,它将忽略调用。在任何视图和控制器中都可以访问Helper方法,但操作方法绑定到该特定类的对象。所以像current\u user
这样不需要任何对象的东西应该是一个helper方法。
Rokibul正确地指出只使用语法:[]
来避免其他控制器操作。
但请注意,Rails 5.0中不推荐使用所有before_过滤器语法,并将在Rails 5.1中删除,请改用before_action
。Helper方法可在任何视图和控制器中访问,但action方法绑定到该特定类的对象。所以像current\u user
这样不需要任何对象的东西应该是一个helper方法。
Rokibul正确地指出只使用语法:[]
来避免其他控制器操作。
但请注意,Rails 5.0中不推荐使用所有before_过滤器语法,并将在Rails 5.1中删除,请改用before_action
。好的,这就解决了它。最终,如果你要这样做,你会像我一样处理问题,还是会使用类似于helper\u method
的方法?我不会使用helper方法,因为helper方法是你经常使用的视图和控制器。我会使用前文件管理器。如果真的对你有帮助的话,你可以让这个答案正确:)好的,这就解决了它。最终,如果你要这样做,你会像我一样处理问题,还是会使用类似于helper\u method
的方法?我不会使用helper方法,因为helper方法是你经常使用的视图和控制器。我会使用前文件管理器。如果真的对您有帮助,您可以正确回答:)