programing

레일 4: before_filter vs. before_action

muds 2023. 6. 15. 22:06
반응형

레일 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

반응형