রেলস - একজন নিয়ামকের অভ্যন্তরে কীভাবে কোনও সহায়ক ব্যবহার করবেন


207

আমি যখন বুঝতে পারি যে আপনার দৃশ্যের ভিতরে কোনও সহায়ক ব্যবহার করার কথা রয়েছে, আমি ফিরে আসার জন্য একটি জেএসওএন অবজেক্ট তৈরি করায় আমার নিয়ামকটিতে আমার একজন সহায়ক দরকার।

এটি কিছুটা এভাবে যায়:

def xxxxx

   @comments = Array.new

   @c_comments.each do |comment|
   @comments << {
     :id => comment.id,
     :content => html_format(comment.content)
   }
   end

   render :json => @comments
end

আমি কীভাবে আমার html_formatসহায়ককে অ্যাক্সেস করতে পারি ?


2
আপনি @ গ্রসারের উত্তর বিবেচনা করতে চাইতে পারেন, এটি আরও অনেক সম্পূর্ণ complete
টোকল্যান্ড

আমি জানি এটি পুরানো তবে ... প্লেইন রুবি ক্লাসে কী সমস্যা? : পি
তারেক

উত্তর:


205

দ্রষ্টব্য: এটি রেলগুলিতে 2 দিনের মধ্যে লেখা এবং স্বীকৃত হয়েছিল; আজকাল গ্রসারের উত্তর হ'ল উপায়।

বিকল্প 1: সম্ভবত সবচেয়ে সহজ উপায় হ'ল আপনার নিয়ামকটিতে আপনার সহায়ক মডিউলটি অন্তর্ভুক্ত করা:

class MyController < ApplicationController
  include MyHelper

  def xxxx
    @comments = []
    Comment.find_each do |comment|
      @comments << {:id => comment.id, :html => html_format(comment.content)}
    end
  end
end

বিকল্প 2: বা আপনি সহায়ক পদ্ধতিটিকে শ্রেণিকরণ হিসাবে ঘোষণা করতে পারেন এবং এটি এর মতো ব্যবহার করতে পারেন:

MyHelper.html_format(comment.content)

আপনি যদি এটিকে উদাহরণ ফাংশন এবং ক্লাস ফাংশন উভয় হিসাবেই ব্যবহার করতে সক্ষম হতে চান তবে আপনি উভয় সংস্করণটি আপনার সহায়ক হিসাবে ঘোষণা করতে পারেন:

module MyHelper
  def self.html_format(str)
    process(str)
  end

  def html_format(str)
    MyHelper.html_format(str)
  end
end

আশাকরি এটা সাহায্য করবে!


ধন্যবাদ তবে আমি কিছুটা বিভ্রান্ত এই মুহুর্তে আমার সহায়কটি /app/helpers/application_helper.rb এ আছেন ... আপনি কি পরামর্শ দিচ্ছেন যে আমার সাহায্যকারীটিকে অ্যাপ্লিকেশন নিয়ন্ত্রণকারীতে স্থানান্তর করা উচিত?
অ্যানপ্রেন্টিস

আমি আমার অ্যাপ্লিকেশন_কন্ট্রোলারে 'অ্যাপ্লিকেশন হেল্পার অন্তর্ভুক্ত করুন' তবে 'নোমথোডেরর' (অ্যাপ্লিকেশনহেল্পারের জন্য অপরিবর্তিত পদ্ধতি `এইচটিএমএল_ফর্ম্যাট: মডিউল) এর সাথে ত্রুটিগুলি যুক্ত করেছি: '
এন্টারপ্রেন্টিস

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

4
আপনি যখন যে সহায়তা সহায়ক পদ্ধতি ব্যবহার করতে চান তা দেখার পদ্ধতিগুলি যেমন ব্যবহার করে তখন এটি কাজ করে না link_to। নিয়ন্ত্রণকারীদের এই পদ্ধতিগুলিতে অ্যাক্সেস নেই এবং আমার বেশিরভাগ সহায়ক এই পদ্ধতিগুলি ব্যবহার করেন। এছাড়াও, নিয়ামকের সাহায্যকারীকে অন্তর্ভুক্ত করে সহায়তার সমস্ত পদ্ধতি জনসমক্ষে অ্যাক্সেসযোগ্য ক্রিয়া হিসাবে প্রকাশ করে যা ভাল নয়। view_context3 টি
কারাগারে

@ গ্রেগটি - গ্রোসারের উত্তর আগে কখনও দেখেনি, কারণ সত্যের পরে এটি কিছুটা পরে এসেছিল, তবে আমি এটি আরও ভাল পছন্দ করি। সে সবেমাত্র আমার উর্ধ্বতন পেয়েছে।
জাভিয়ের হল্ট

304

তুমি ব্যবহার করতে পার

  • helpers.<helper>মধ্যে পাগল 5+ (অথবা ActionController::Base.helpers.<helper>)
  • view_context.<helper>( Ails ও ails রেল ) (সতর্কতা: এটি প্রতি কল প্রতি একটি নতুন দর্শন ইনস্ট্যান্ট করে তোলে)
  • @template.<helper>( রেল 2 )
  • তার পরে একটি সিঙ্গলটন ক্লাসে সহায়ক অন্তর্ভুক্ত করুন singleton.helper
  • include নিয়ামকের সাহায্যকারী (সতর্কতা: সমস্ত সহায়ক পদ্ধতিকে নিয়ন্ত্রণকারী ক্রিয়ায় পরিণত করবে)

56
এই উত্তর আরও ভাল! 3 রেলগুলিতে, কেবল কল view_context.helper_functionকরা সহজ এবং দুর্দান্ত কাজ করে। ActionController::Base.helpers.helper_functionসমানভাবে ভাল।
trisweb

29
view_context= প্রতিভা
n_i_c_k

5
সতর্কতা: ব্যবহার করবেন না view_context। এটা তোলে কলের জন্য প্রতি একটি নতুন দৃশ্য উদাহরণস্বরূপ instantiate করব ...
fny

7
ActionController::Base.helpers.helper_functionকাজ মনে হচ্ছে না। একটি নিয়ামক পদ্ধতিতে NoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:কল করার চেষ্টা করার সময় আমি পাই ActionController::Base.helpers.spell_date_and_time()। কলিং view_context.spell_date_and_time()কাজ করে না।
ক্যাটফিশ

37
রেল 5: helpers.helper_functionআপনার কন্ট্রোলারে কেবল ব্যবহার করুন ( github.com/rails/rails/pull/24866 )
মার্কাস

80

কারাগারে 5 helpers.helper_functionআপনার নিয়ামকটি ব্যবহার করুন ।

উদাহরণ:

def update
  # ...
  redirect_to root_url, notice: "Updated #{helpers.pluralize(count, 'record')}"
end

সূত্র: একটি ভিন্ন উত্তরে @ মারকাসের মন্তব্য থেকে। আমি অনুভব করেছি যে তার উত্তরটি তার নিজের উত্তরটির উপযুক্ত কারণ এটি সবচেয়ে পরিষ্কার এবং সহজ সমাধান।

তথ্যসূত্র: https://github.com/rails/rails/pull/24866


6
কিছুটা অদ্ভুত মনে হচ্ছে যে কনসোলে আপনি helperএকক এবং নিয়ামককে এটি বহুবচন বলেছিলেন ।
সহকর্মী অচেনা

10

আমার সমস্যাটি বিকল্প 1 দিয়ে সমাধান করা হয়েছে Pro সম্ভবত সবচেয়ে সহজ উপায় হ'ল আপনার নিয়ামকটিতে আপনার সহায়ক মডিউলটি অন্তর্ভুক্ত করা:

class ApplicationController < ActionController::Base
  include ApplicationHelper

...

1
এটি কেবলমাত্র খারাপ দিক যা এটি সহায়ক ফাংশনগুলির নামের সাথে নিয়ন্ত্রক ক্রিয়া যুক্ত করে। তবে টিবিএইচ, আমি এটিও করি :)
ফেলিক্স

9

সাধারণভাবে, যদি সাহায্যকারী (ন্যায়বিচারী) কন্ট্রোলারে ব্যবহার করতে হয় তবে আমি এটিকে উদাহরণস্বরূপ হিসাবে ঘোষণা করতে পছন্দ করি class ApplicationController


5
সুরক্ষিত পদ্ধতি হিসাবে
বেনজামিন ক্রাউজিয়ার

3

5+ রেলগুলিতে আপনি সাধারণ উদাহরণ দিয়ে নীচে প্রদর্শিত হিসাবে ফাংশনটি সহজেই ব্যবহার করতে পারেন:

module ApplicationHelper
  # format datetime in the format #2018-12-01 12:12 PM
  def datetime_format(datetime = nil)
    if datetime
      datetime.strftime('%Y-%m-%d %H:%M %p')
    else
      'NA'
    end
  end
end

class ExamplesController < ApplicationController
  def index
    current_datetime = helpers.datetime_format DateTime.now
    raise current_datetime.inspect
  end
end

আউটপুট

"2018-12-10 01:01 AM"

0
class MyController < ApplicationController
    # include your helper
    include MyHelper
    # or Rails helper
    include ActionView::Helpers::NumberHelper

    def my_action
      price = number_to_currency(10000)
    end
end

5 টি কারাগারে সহজলভ্য সাহায্যকারী ( হেল্পার্স.নম্বার_ টু সিকিউরিটি (10000) ) ব্যবহার করুন

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