Rails 4 before_action, 호출 된 메소드에 매개 변수 전달


84

다음 코드가 있습니다.

class SupportsController < ApplicationController
  before_action :set_support, only: [:show, :edit, :update, :destroy]
  ....

set_support4 개의 뷰 메소드 모두에 적용 할 메소드 에 문자열을 전달할 수 있습니까? set_support뷰의 각 메서드에 대해 메서드에 다른 문자열을 전달할 수 있습니까?

답변:


161
before_action only: [:show, :edit, :update, :destroy] do
  set_support("value")
end

6
@tihom 결합이 반응은이 같은 얻을 수 있습니다 before_action only: [:show, :edit, :update, :destroy] do |c| c.set_support(params[:action) end
germs12

다음과 같은 문자열 하나를 제안합니다. before_action {| action | action.update_user_balance (10000)}, 여기서 update_user_balance 매개 변수를 얻는 모델 메소드입니다. def update_user_balance (arg) ... end
mmike

1
이것은 더 긴 방법으로 잘 작동합니다. 그렇지 않으면 아래 Kyle Decot가 제출 한 답변을 사용합니다.
jkwok

52

람다를 사용할 수 있습니다.

class SupportsController < ApplicationController
  before_action -> { set_support("value") }, 
    only: [:show, :edit, :update, :destroy]
  ...

10

짧고 한 줄짜리 답변 (내가 개인적으로 콜백에 선호 함 )은 다음과 같습니다.

before_action except:[:index, :show] { method :param1, :param2 }

또 다른 예:

after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }

5

다음 before_action과 같이 람다를에 전달 params[:action]하고 set_support메서드에 전달할 수 있습니다 .

class SupportsController < ApplicationController
  before_action only: [:show, :edit, :update, :destroy] {|c| c.set_support params[:action]}
  ....

그런 다음 전송되는 PARAM은 문자열 중 하나입니다 : 'show', 'edit', 'update'또는 'destroy'.


2
이 구문이 작동하도록 시도했지만 작동하지 못했습니다. Kyle이 사용한 구문이 저에게 효과적이었습니다.
J3RN

이 구문은 작동하지 않습니다
Prime

0

SupportsController

class SupportsController < ApplicationController    
  before_action only: [:show, :edit, :update, :destroy] { |ctrl|
    ctrl.set_support("the_value")
  }
...

ApplicationController

class ApplicationController < ActionController
  def set_support (value = "")
    p value
  end
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.