레일 4: before_filter vs. before_action
4.0.0 이상의 레일에서 생성기는 다음을 사용하여 CRUD 작업을 생성합니다.before_action
것은 아니다.before_filter
그것은 같은 일을 하는 것 같습니다.그렇다면 이 둘의 차이점은 무엇일까요?
에서 알 수 있듯이ActionController::Base
,before_action
의 새로운 구문일 뿐입니다.before_filter
.
하지만, 그before_filter
구문은 Rails 5.0에서 더 이상 사용되지 않으며 Rails 5.1에서 제거됩니다.
단지 구문 차이입니다. 레일 앱에는 CRUD가 있으며 기본적으로 이름 색인, 새로 만들기, 만들기, 표시, 업데이트, 편집, 파기 등 7가지 작업이 있습니다.
Rails 4를 사용하면 개발자가 필터링 전 구문을 작업 전으로 쉽게 변경할 수 있습니다.
before_action 호출 메서드는 선언하는 액션 앞에 있습니다.
before_action :set_event, only: [:show, :update, :destroy, :edit]
set_event는 표시, 업데이트, 편집 및 파기 전에 항상 호출하는 메서드입니다.
그것은 단지 이름만 바꾼 것입니다. before_action
작업 전에 실행되기 때문에 보다 구체적입니다.
before_filter/before_action: 작업이 실행되기 전에 실행될 모든 항목을 의미합니다.
둘 다 똑같아요.그들의 행동은 똑같기 때문에 그들은 서로를 위한 가명일 뿐입니다.
rspec-filter를 사용하여 _action 이전만 사용하고, capybara는 이전과 같이 _filter가 테스트 중에 예상치 못한 행동을 할 수 있습니다.
class TodosController < ApplicationController
before_filter :authenticate
def index
@todos = Todo.all
end
## Rest of the code follows
end
before_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>
하지만_filter가 주기 전에...
ActionView::Template::Error:
undefined method `each' for nil:NilClass
즉, 어떻게든 후크는 오류 없이 실행되지만 컨트롤러는 @todos 초기화되지 않은 상태로 표시됩니다. 시간을 절약하고 사용하지 않는 코드를 사용하십시오.
before_action과 before_filter의 차이가 무엇인지 알아보려면 액션과 필터의 차이를 이해해야 합니다.
작업은 라우팅할 수 있는 컨트롤러의 한 방법입니다.예를 들어 사용자 생성 페이지가 UsersController #new -new는 이 경로의 작업입니다.
필터는 컨트롤러 작업(이전, 이후 또는 주변)과 관련하여 실행됩니다.이러한 방법은 공통 데이터를 컨트롤러의 모든 작업으로 리디렉션하거나 설정하여 작업 처리를 중지할 수 있습니다.
레일 4 –> _action
레일 3 –> _필터
언급URL : https://stackoverflow.com/questions/16519828/rails-4-before-filter-vs-before-action
'programing' 카테고리의 다른 글
레이블 문자 회전(SeaBorn) (0) | 2023.06.15 |
---|---|
응용 프로그램이 실행 중인 경로를 유형 스크립트로 가져오려면 어떻게 해야 합니까? (0) | 2023.06.15 |
카트에 대한 조건부 추가 요금 (0) | 2023.06.15 |
Apache POI 삽입 이미지 (0) | 2023.06.15 |
MySQL 및 MariaDB가 앰퍼샌드를 포함하는 문자열을 데이터베이스에서 볼 수 있을 때 보고하지 않음 (0) | 2023.06.15 |