রেল অন রেল 3 ব্যবহার করে একটি মডিউল কীভাবে তৈরি এবং ব্যবহার করবেন?


90

আমি রুবেলটি রেল 3 এ ব্যবহার করছি এবং আমি একটি মডিউলে কিছু কাস্টম এবং ভাগ করা কোড সরিয়ে নিতে চাই।

  1. মডিউল কোডটি লিখতে আমার কোন বাক্য গঠন ব্যবহার করা উচিত?
  2. আমার অ্যাপ্লিকেশনটির কোন ফোল্ডারে আমাকে মডিউল ফাইল রাখতে হবে?
  3. আমি কীভাবে এক বা একাধিক কন্ট্রোলার ক্লাসে সেই মডিউলটি অন্তর্ভুক্ত করতে পারি?
  4. অন্য কোন পদক্ষেপ, যদি থাকে তবে আমার আবেদনের যে কোনও জায়গায় আমাকে কাস্টম মডিউলটি ব্যবহার করতে হবে?
  5. আমি কীভাবে আমার অ্যাপ্লিকেশন থেকে মডিউলটিতে পদ্ধতিগুলি কল করতে পারি?

আগাম ধন্যবাদ.


4
খুব ভালো! এটা আমার দরকার.
অরূপ রক্ষিত

উত্তর:


116

To 1. একটি মডিউল সহজভাবে এই বলে তৈরি করা / খোলা হয়:

module MyModule
  def first_module_method
  end
end

থেকে 2. libফোল্ডার। আপনি যদি libফোল্ডারে আপনার মডিউলগুলি সংগঠিত করতে চান তবে আপনি সেগুলি মডিউলগুলিতে নিজেরাই রাখতে পারেন। উদাহরণস্বরূপ, আপনি যদি একটি সাবফোল্ডার চান তবে super_modulesআপনার মডিউলগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হবে:

module SuperModules
  module MyModule
    def first_module_method
    end
  end
end

থেকে 3./5। কোনও ক্লাসে মডিউল অন্তর্ভুক্ত করার সময় আপনি কেবল মডিউলগুলির পদ্ধতিগুলি কল করতে পারেন যেমন তারা শ্রেণীর মধ্যে সংজ্ঞায়িত হয়েছে:

class MyClass
  include MyModule
  def some_method
    first_module_method #calls module method
  end
end

৪. প্রথম দিকে, নিশ্চিত হয়ে নিন যে আপনার অ্যাপ্লিকেশনটির প্রতিটি শ্রেণিতে আপনার মডিউলটি সত্যই প্রয়োজন। যদি এটি না হয় তবে এটি কেবল যেখানে এটি প্রয়োজন সেখানে অন্তর্ভুক্ত করা বুদ্ধিমান বোধ করে যাতে কোনওভাবে ক্লাসগুলি ফুলে না যায়। আপনি যদি সত্যই সর্বত্র মডিউলটি চান তবে অ্যাপটিতে আপনার ক্লাসের শ্রেণিবিন্যাস দেখুন। আপনি কি সমস্ত মডেলের মডিউল চান? আপনি অ্যাক্টিভেকর্ড :: বেস খুলতে এবং সেখানে আপনার মডিউল যুক্ত করতে পারেন।


4
ফাইলগুলি অর্গানাইজ করার জন্য, আমি কি 'লিব' ফোল্ডারে একটি উপ-ফোল্ডার তৈরি করতে পারি? যদি তাই হয়, কি পরিবর্তন?
ব্যবহারকারী 502052

4
@ user502052 আমি এই প্রশ্নের উত্তর দেওয়ার জন্য 2 পয়েন্টের উত্তর আপডেট করেছি।
স্টিফান

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

4
একবার আপনি এটা অন্তর্ভুক্ত করে উপরের মতো একটি মডিউল তৈরি libফোল্ডারের একটি গুরুত্বপূর্ণ নোট লাইন uncomment করার Rails3 সক্ষম করা config\application.rbজন্য config.autoload_paths- যেমন পড়া, stackoverflow.com/questions/1073076/rails-lib-modules-and ... নোট এছাড়াও আপনাকে মডিউলটির সাথে মেলে এমন আপনার মডিউলের জন্য এমন একটি ফাইলের নাম ব্যবহার করতে সতর্ক থাকতে হবে। তাই আপনি যদি তা রক্ষা lib/test/my_module.rb, আপনি আছে include Test::MyModule- আরো বিস্তারিত জানার জন্য দেখুন stackoverflow.com/questions/4073856/rails-3-autoload
sameers

6
আমি সবেমাত্র আমার এই পুরানো উত্তরটি পেয়েছি। :( আমি ডাউনওয়েট করতে চাই li কিছুকে লিবিতে রাখবেন না! কোডটি app/modelsযদি অন্য মডেলগুলিতে অ্যাক্সেসের প্রয়োজন হয় তবে আপনার কোডটি (অতিরিক্ত মডিউল সহ) রাখুন your আপনার কোডটি যদি সত্যিই একটি 'লাইব্রেরি' হয় এবং এটি নিজেই উপস্থিত থাকতে পারে তবে আমি রত্ন বিক্রির পরামর্শ দিন examples উদাহরণস্বরূপ, github.com/shageman/t__xtxt_big_thing দেখুন
স্টিফান

3

এ> ঘ। আপনি অন্য রুবি শ্রেণীর মতো একই বাক্য গঠন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আমি একটি যানবাহন ক্লাসিফার মডিউলটি সংজ্ঞায়িত করছি যা একটি ইনপুট হিসাবে প্রাপ্ত চাকাগুলির সংখ্যার উপর ভিত্তি করে কোনও যানটিকে শ্রেণিবদ্ধকরণের জন্য শ্রেণিবদ্ধ_উইহিকল পদ্ধতিটি ব্যবহার করছে।

module VehicleClassifer
  def classify_vehicle(number_of_wheels)
    VehicleType.where("number_of_wheels = ?", number_of_wheels)
  end
end

এ> 2। মডিউলগুলি সাধারণত / lib ফোল্ডারে জমা থাকে।

3,4,5 টি প্রশ্নের কম-বেশি একই উত্তর রয়েছে। তুমি ব্যবহার করতে পার

class SomeController < ApplicationController
  include VehicleClassfier

  def index 
    classify_vehicle(4)  
  end
end

ক্লাসে আপনি মডিউলটি ব্যবহার করছেন এবং মডিউলটির সমস্ত পদ্ধতিতে আপনার অ্যাক্সেস থাকবে।

এছাড়াও, আপনার অ্যাপ্লিকেশনটির মাধ্যমে আপনার যদি কোনও মডিউল ব্যবহার করতে হয় তবে আপনি এটিকে আপনার অ্যাপ্লিকেশন নিয়ামকটিতে অন্তর্ভুক্ত করতে পারেন।


4
আমি এটি চেষ্টা করেছিলাম এবং একটি অপরিবর্তিত পদ্ধতি ত্রুটি পেয়েছি। আমি কী ভুল করছি এর কোন ধারণা?
টনি

আপনি কি নিশ্চিত যে আপনার মডিউলটি অ্যাক্সেসযোগ্য? stackoverflow.com/questions/6604272/… সম্ভবত আপনাকে সাহায্য করবে?
শ্রেয়াস

4
@ টনি - মডিউলটির পদ্ধতিগুলি উপলভ্য হওয়ার জন্য আপনার নিজের সার্ভারটি পুনরায় চালু করতে হবে - এমনকি ডেভ-মোডেও। এবং যতবারই আপনি আপনার মডিউলটিতে কোড পরিবর্তন করেন, আপনাকে অবশ্যই সার্ভারটি আবার চালু করতে হবে। উদাহরণস্বরূপ, যদি কোনও ত্রুটি হয়, বা এটি পুরানো কোডে ত্রুটি ঘটবে তবে ত্রুটিটিতে সেই লাইনে নতুন কোডটি হাইলাইট করুন - খুব বিভ্রান্তিকর।
জোসেফকে

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