4.2+ রেলের জন্য আপডেট
#respond_with
এবং ::respond_to
( বিশেষ দ্রষ্টব্য বর্গ পদ্ধতি) হয় আর পাগল এর একটি অংশ । তারা তৃতীয়-দলে স্থানান্তরিত হয়েছিল ails.২ রেল ( প্রতিক্রিয়াশীল রত্নে R.২ ( প্রকাশিত নোট / অগাস্ট ২০১৪ তারিখের প্রতিশ্রুতি ))। প্রতিক্রিয়াকারীদের ডিফল্টরূপে কারাগুলিতে অন্তর্ভুক্ত করা হয়নি, এটি ডিভাইসের নির্ভরতা এবং এর ফলে অনেকগুলি রেল অ্যাপ্লিকেশনগুলিতে পাওয়া যায়।
দ্য #respond_to
উদাহরণ হিসেবে বলা যায় পদ্ধতি, তবে হয় এখনো পাগল একটা অংশ (5.2rc1 এই লেখার হিসাবে)।
অফিসিয়াল রেলস এপিআই ডকুমেন্টেশন ActionController::MimeResponds
কীভাবে #respond_to
কাজ করে তা ব্যাখ্যা করে। আসল রেল গাইড নথির জন্য ডকুমেন্টেশন মন্তব্য#respond_with
এবং ::respond_to
এখনও উত্তরদাতাদের রত্ন উত্স কোডে পাওয়া যায় ।
আসল উত্তর
প্রতিক্রিয়াকারীদের কোডটি একটি শ্রেণি এবং একটি মডিউল ভিত্তিক। অ্যাকশনকন্ট্রোলারের অন্তর্ভুক্ত মাইম রিস্পন্ডস :: বেস , ক্লাস আপনারApplicationController
উত্তরাধিকার সূত্রে প্রাপ্ত । তারপরে অ্যাকশনকন্ট্রোলার :: রেসপন্ডার রয়েছে যা রেসপন্ট_ওয়থ ব্যবহার করার সময় ডিফল্ট আচরণ সরবরাহ করে।
ডিফল্টরূপে, প্রতিক্রিয়াটিতে একমাত্র আচরণের রেলগুলি ক্রিয়াটির সাথে মিল রেখে একটি নাম সহ কোনও টেম্পলেট রেন্ডার করার একটি অন্তর্নিহিত প্রচেষ্টা। এর বাইরে যে কোনও কিছুর জন্য ক্রিয়াকলাপের মধ্যে আরও নির্দেশিকাগুলি বা একাধিক ফর্ম্যাট প্রতিক্রিয়াগুলি পরিচালনা করতে একটি কাস্টম প্রতিক্রিয়া_তে ব্লকের সাথে কল করতে হবে।
বেশিরভাগ নিয়ামকরা যেমন কাস্টমাইজেশনের মোটামুটি সাধারণ প্যাটার্ন ব্যবহার করেন, প্রতিক্রিয়াকারীরা আরও ডিফল্ট আচরণ প্রবর্তন করে বিমূর্তির একটি অতিরিক্ত স্তর সরবরাহ করে। নির্দিষ্ট ফর্ম্যাটগুলির জন্য টো_এক্সএমএল / টু জসনকে কল করা ক্রিয়াকলাপগুলি এবং মিউটেটর ক্রিয়াগুলি একই রকম সরবরাহ করে পাশাপাশি সফল মিউটর ক্রিয়াকলাপের পুনর্নির্দেশগুলিও পড়ুন।
সূক্ষ্ম টুইটগুলি থেকে সম্পূর্ণরূপে আচরণকে ওভাররাইডিং বা প্রসারিত করার ক্ষেত্রে প্রতিক্রিয়াশীলরা কীভাবে আচরণ করে তা কাস্টমাইজ করার কয়েকটি সুযোগ রয়েছে।
শ্রেণী স্তর: respond_to
এখানে আপনি যে ফর্ম্যাটগুলি প্রতিক্রিয়াশীলকে পরিচালনা করতে হবে তা নির্দিষ্ট করে দিন। ফর্ম্যাটগুলি কাস্টমাইজ করা যেতে পারে যে সেগুলি কোন ক্রিয়াতে প্রযোজ্য হবে। প্রতিটি বিন্যাসের জন্য ক্রিয়াগুলির সম্পূর্ণ কাস্টমাইজেশনকে মঞ্জুরি দিয়ে পৃথক কল সহ প্রতিটি ফর্ম্যাট নির্দিষ্ট করা যেতে পারে।
# Responds to html and json on all actions
respond_to :html, :json
# Responds to html and json on index and show actions only.
respond_to :html, :json, :only => [:index,:show]
# Responds to html for everything except show, and json only for index, create and update
respond_to :html, :except => [:show]
respond_to :json, :only => [:index, :create, :update]
শ্রেণী স্তর: responder
এটি একটি শ্রেণীর বৈশিষ্ট্য যা প্রতিক্রিয়াশীলকে ধরে রাখে। এটি কলটিতে প্রতিক্রিয়া জানাতে পারে এমন কোনও কিছুই হতে পারে, যার অর্থ আপনি একটি প্রো / ল্যাম্বদা বা কলটি সাড়া দেয় এমন একটি ক্লাস ব্যবহার করতে পারেন। অন্য বিকল্পটি হ'ল বিদ্যমান পদ্ধতিগুলিকে ওভারলোড করার জন্য বিদ্যমান প্রতিক্রিয়াকারীর সাথে এক বা মডিউলগুলি মিশ্রিত করা, ডিফল্ট আচরণকে বাড়িয়ে তোলা।
class SomeController < ApplicationController
respond_to :json
self.responder = proc do |controller, resources, options|
resource = resources.last
request = controller.request
if request.get?
controller.render json: resource
elsif request.post? or request.put?
if resource.errors.any?
render json: {:status => 'failed', :errors => resource.errors}
else
render json: {:status => 'created', :object => resource}
end
end
end
end
কিছু আকর্ষণীয় প্রান্ত ব্যবহারের ক্ষেত্রে থাকতে পারে, এটির বেশি সম্ভাবনা রয়েছে যে ডিফল্ট প্রতিক্রিয়াকারীর মধ্যে মডিউলগুলি প্রসারিত বা মেশানো আরও সাধারণ প্যাটার্ন হতে পারে। যাইহোক, যে বিকল্পগুলি প্রাসঙ্গিক সেগুলি হ'ল সম্পদ এবং বিকল্পগুলি, কারণ এগুলি উত্তর_দ্বারা থেকে পাস করা হয়েছে।
ইনস্ট্যান্স স্তর: respond_with
এখানে বিকল্পগুলি হ'ল যা আপনার নিয়ামককে রেন্ডার বা পুনর্নির্দেশের জন্য পাস করা হবে তবে সেগুলি কেবল সাফল্যের দৃশ্যের জন্য অন্তর্ভুক্ত। জিইটি ক্রিয়াকলাপগুলির জন্য এগুলি রেন্ডার কলগুলি হবে, অন্যান্য ক্রিয়াকলাপের জন্য এটি পুনর্নির্দেশের বিকল্প হবে। সম্ভবত এর মধ্যে সবচেয়ে দরকারী হ'ল :location
বিকল্পটি, যা উত্তর_আর যুক্তিগুলি সঠিক URL তৈরি করতে যথেষ্ট না হলে ক্ষেত্রে পুনঃনির্দেশের পথটিকে ওভাররাইড করতে ব্যবহার করা যেতে পারে।
# These two are essentially equal
respond_with(:admin, @user, @post)
respond_with(@post, :location => admin_user_post(@user, @post)
# Respond with a 201 instead of a 200 HTTP status code, and also
# redirect to the collection path instead of the resource path
respond_with(@post, :status => :created, :location => posts_path)
# Note that if you want to pass a URL with a query string
# then the location option would be needed.
# /users?scope=active
respond_with(@user, :location => users_path(:scope => 'active'))
বিকল্প হিসাবে, প্রতিক্রিয়াশীল জহর কেবলমাত্র কিছু ডিফল্ট আচরণকে ওভাররাইড করার জন্য কিছু মডিউল সরবরাহ করে না। এটি একটি বেনাম শ্রেণীর সাথে ডিফল্ট প্রতিক্রিয়াশীলকে ওভাররাইড করে যা ডিফল্ট প্রতিক্রিয়াকারীকে প্রসারিত করে এবং এই শ্রেণিতে কাস্টম মডিউলগুলিতে মিশ্রণের জন্য একটি শ্রেণির স্তরের পদ্ধতি সরবরাহ করে। এখানে সর্বাধিক দরকারী হ'ল ফ্ল্যাশ রেসপনার, যা ডিফল্টরূপে I18n সিস্টেমে কাস্টমাইজেশনকে ডেলিভারি করে ফ্ল্যাশগুলির একটি ডিফল্ট সেট সরবরাহ config/locales/en.yml
করে।
পূর্ববর্তী প্রকল্পগুলিতে আমি কাস্টম প্রতিক্রিয়াকারীদের কয়েকটি উদাহরণ ব্যবহার করেছি এমন একটি প্রতিক্রিয়া অন্তর্ভুক্ত রয়েছে যা স্বয়ংক্রিয়ভাবে আমার সংস্থানগুলি সজ্জিত করে এবং পৃষ্ঠার শিরোনামটি সহজেই কাস্টমাইজ বা ওভাররাইড করার জন্য একটি ইন্টারফেসের সাথে পৃষ্ঠা শিরোনামগুলির একটি ডিফল্ট সেট সরবরাহ করে।
self.responder =
responder =