4 पहले_रैक्शन रेल, चालित विधि के लिए पैरामीटर पास करें


84

मेरे पास निम्नलिखित कोड हैं:

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

क्या set_supportसभी 4 दृश्य विधियों के लिए लागू होने वाली विधि के लिए एक स्ट्रिंग पास करना संभव है ? क्या 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
कीटाणु 12

मैं एक स्ट्रिंग की तरह सुझाव देता हूं: इससे पहले कि। क्रिया {| क्रिया | action.update_user_balance (10000)}, जहाँ update_user_balance यह एक मॉडल विधि है जो
परम

1
यह लंबी विधियों के साथ अच्छी तरह से काम करता है, अन्यथा मैं काइल डिकोट द्वारा प्रस्तुत उत्तर का उपयोग करूंगा।
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]}
  ....

तब परम भेजा जा रहा तार में से एक है: 'show', 'edit', 'update'या 'destroy'


2
मैंने इस सिंटेक्स को काम करने की कोशिश की, लेकिन करने में असमर्थ रहा। वाक्यविन्यास काइल ने मेरे लिए काम किया।
J3RN

यह वाक्य रचना काम नहीं करती है
प्राइम

0

द सपोर्ट्सकंट्रोलर

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
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.