在rails >4.0.0中,生成器使用before_action而不是before_filter创建CRUD操作。它似乎也在做同样的事情。那么这两者之间的区别是什么呢?
发布于 2013-05-13 18:33:04
这只是一个名字的改变。before_action更具体,因为它在操作之前执行。
发布于 2018-04-30 18:52:24
before_filter/ before _ action :表示在执行任何操作之前要执行的任何内容。
两者都是一样的。他们只是彼此的别名,因为他们的行为是一样的。
发布于 2021-06-13 20:39:18
只能将before_action与rspec-rails一起使用,因为before_filter会在测试期间表现不佳,从而给人带来惊喜
class TodosController < ApplicationController
before_filter :authenticate
def index
@todos = Todo.all
end
## Rest of the code follows
endbefore_filter
feature 'User creates todo' do
scenario 'successfully' do
sign_in
click_on 'Add Todo'
fill_in 'Title', with: "Buy Milk"
click_on 'Submit'
expect(page).to have_css '.todos li', text: "Buy Milk"
end
end预期的失败是
NoMethodError:
undefined method `authenticate' for #<TodosController:0x0000558b68573f48>但是before_filter给了..。
ActionView::Template::Error:
undefined method `each' for nil:NilClass也就是说,不知何故,钩子运行没有错误,但控制器使用@todos uninitialized更好地节省了时间,使用非过时的代码...
https://stackoverflow.com/questions/16519828
复制相似问题