কেন সমস্ত রেল সহায়ক সকল দর্শন, সর্বদা উপলব্ধ? এই নিষ্ক্রিয় করার কোন উপায় আছে কি?


89

আমি কেন অন্য নিয়ামকের জন্য দর্শনগুলিতে একজন নিয়ামকের জন্য সহায়ক পদ্ধতি অ্যাক্সেস করতে পারি? হ্যাকিং / প্যাচাল পেলগুলি ব্যতীত এটিকে অক্ষম করার কোনও উপায় আছে কি?


4
একটি নতুন, আরও প্রাসঙ্গিক উত্তর আছে। ক্রেগ
ওয়াকারদের

উত্তর:


106

@ জর্জি শ্রেইবারের পদ্ধতিটি ৩.১ রেলগুলির মতো কাজ করে না; কোড উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে।

তবে, রেল ৩.১ এ এই বৈশিষ্ট্যটি অক্ষম করার আরও একটি ভাল উপায় আছে (এবং আশা করি পরে)। আপনার কনফিগারেশন / প্রয়োগ.আরবিতে এই লাইনটি যুক্ত করুন:

config.action_controller.include_all_helpers = false

এটি অ্যাপ্লিকেশন নিয়ন্ত্রণকারীকে সমস্ত সহায়ককে লোড করা থেকে বিরত করবে ।

(যে কেউ আগ্রহী তাদের জন্য, এখানে বৈশিষ্ট্যটি তৈরি করা হয়েছিল এমন টান অনুরোধ এখানে রয়েছে ))


আমি ৩.২ তে আছি এখানে অ্যাপ্লিকেশন.কনফিগের অর্থ কনফিগারেশন / অ্যাপ্লিকেশন.আরবি?
ব্র্যান্ডন হেনরি

আমি অন্তর্ভুক্ত_সকল_হেল্পারগুলি অক্ষম করে দিলে বা আমি নিজে নিজে এটি অন্তর্ভুক্ত করতে চাইলে অ্যাপ্লিকেশনহেল্পটিও কি যুক্ত হবে?
রবার্ট অডি

@ আজিজলাইট আমি নিশ্চিত নই, যেহেতু আমি পরীক্ষা করিনি, এটি। তবে, আমি এটি প্রত্যাশা করছিলাম, যেহেতু অ্যাপ্লিকেশনহেল্পটি "রুট" সহায়ক হিসাবে সর্বদা দর্শনে উপলভ্য হওয়ার লক্ষ্যযুক্ত। এটি এখানে সম্পর্কিত সমস্যার সাথে সম্পর্কিত না হওয়া নিয়ন্ত্রকদের সহায়তাকারী।
ক্রেগ ওয়াকার

4
আমি মনে করি এটি ডিফল্ট আচরণ হওয়া উচিত।
নফাফা বুতেফার

98

উত্তরটি রিল সংস্করণে নির্ভর করে।

রেল> = 3.1

পরিবর্তন include_all_helpersকরার জন্য কনফিগ falseকোন পরিবেশে যেখানে আপনি কনফিগারেশন প্রয়োগ করতে চান না। আপনি যদি কনফিগারেশনটি সমস্ত পরিবেশে প্রয়োগ করতে চান তবে এটি পরিবর্তন করুন application.rb

config.action_controller.include_all_helpers = false

মিথ্যা হলে এটি অন্তর্ভুক্তি এড়িয়ে যাবে

রেল <3.1

নিম্নলিখিত লাইনটি মুছুন ApplicationController

helper :all

এইভাবে প্রতিটি নিয়ামক নিজস্ব সাহায্যকারী লোড করবে।


4
এই লাইনটি আমার কাছে রেল ৩.২-তে বিদ্যমান নেই, সুতরাং এই সমাধান সম্ভবত আরেলের পরবর্তী সংস্করণগুলিতে প্রযোজ্য না।
টাইলার কলিয়ার

আমি আগ্রহী হব কেন এটি কেন রেল আপ সংস্করণ 3.1 থেকে এত উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে? আমাকে খুব একটা বোঝায় না।
জোশুয়া মুহিম

6
দ্রষ্টব্য: উপরের মন্তব্যগুলি এখন আর বৈধ নয়, এখন উত্তরটি পুনরায়> 3.1
কাইল হিরোনিমাস

4
দ্রষ্টব্য: আপনার অ্যাপ্লিকেশনহেল্প এখনও লোড হবে। আপনি যদি কোনও সময় নির্দিষ্ট কোনও সহায়ককে অন্তর্ভুক্ত করতে চান তবে include HelperNameআপনি আপনার অ্যাপ্লিকেশনহেল্পারের শীর্ষে যুক্ত করতে পারেন ।
ভানসান

4.1 রেলগুলির জন্য এখনও কাজ করে। কেন এই ডিফল্ট নয় ... যেখানে প্রয়োজন সেখানে কেবলমাত্র বিশেষ সহায়তাকারীদের অন্তর্ভুক্ত করা ভাল (@ ভ্যানসান যেমন বলেছিলেন)
ওন্ডেজ আইলাজকো

27

3 রেলগুলিতে, actioncontroller/base.rb(224 লাইনের চারপাশে):

def self.inherited(klass)
  super
  klass.helper :all if klass.superclass == ActionController::Base
end

সুতরাং হ্যাঁ, আপনি যদি নিজের ক্লাসটি থেকে নেন তবে ActionController::Baseসমস্ত সহায়ককে অন্তর্ভুক্ত করা হবে।

এটি দেখতে , আপনার নিয়ামকের কোডের শুরুতে কল করুন clear_helpers( AbstractClass::Helpers; এতে অন্তর্ভুক্ত ActionController::Base)। ক্লিয়ার_হেলপারদের জন্য সোর্স কোড মন্তব্য:

# Clears up all existing helpers in this class, only keeping the helper
# with the same name as this class.

যেমন:

class ApplicationController < ActionController::Base
  clear_helpers
  ...
end

10
আপনি কল করার সময় clear_helpers(কর্মক্ষমতা) ক্ষতি ইতিমধ্যে হয়ে গেছে যেহেতু সমস্ত সাহায্যকারী লোড হয়েছে। আপনি সত্যই config.action_controller.include_all_helpers = false(উপরের @ ক্রেইগ ওয়াকারের বিবরণ হিসাবে) ব্যবহার করতে চান , কারণ এটি সহায়তাকারীদের প্রথম স্থানে লোড হতে বাধা দেয়, ফলে আপনাকে কিছু কার্যকারিতা অর্জন করতে পারে (সম্ভবত সবচেয়ে উল্লেখযোগ্যভাবে উন্নয়ন মোডে)। actioncontroller/base.rbস্নিপেট অন্তর্ভুক্ত করার জন্য ধন্যবাদ ; কোডটি দেখতে এবং কিছু রহস্য সরিয়ে ফেলা সর্বদা দুর্দান্ত।
জর্জ অ্যান্ডারসন

clear_helpersরেল 3.0 এর জন্য এখনও কার্যকর - config.action_controller.include_all_helpers = falseএটি কেবল 3.1 এবং এর বেশি রেল।
ছিনতাই হয়েছে

5

প্রকৃতপক্ষে রেল 2 এ , অ্যাকশনকন্ট্রোলার :: বেসের ডিফল্ট কার্যকারিতাটি ছিল সমস্ত সহায়ককে অন্তর্ভুক্ত করা।

চ্যান্সেট 6222 তারিখে 02/24/07 20:33:47 (3 বছর আগে) দ্বারা dhh : এটিকে একটি ডিফল্ট অনুমান করুন যে আপনি সব সময় সাহায্যকারী চান, (হ্যাঁ, হ্যাঁ)

পরিবর্তন:

class ApplicationController < ActionController::Base 
  helper :all # include all helpers, all the time 
end 

রেল 3 বিটা 1 এর হিসাবে, এটি চ্যাঞ্জেলোগ-এ উল্লিখিত হিসাবে আর নেই:

  • যোগ করা হয়েছে যে অ্যাকশনকন্ট্রোলার :: বেস এখন সাহায্যকারী করে: সমস্ত এটি করার জন্য রেলগুলিতে ডিফল্ট অ্যাপ্লিকেশনকন্ট্রোলারের উপর নির্ভর না করে [DHH]

4
তাহলে কি তার মানে কি রেল 3 এ, সমস্ত সহায়ক সব সময়ই ডিফল্টরূপে লোড হয়?
নিক তাই

@ নিক অবশ্যই হ্যাঁ, কমপক্ষে ৩.২
নিতিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.