কন্ট্রোলার বি থেকে আমাকে কন্ট্রোলার এ -তে ক্রিয়া অ্যাকশনটি কল করতে হবে
কারণটি হ'ল যখন আমি কন্ট্রোলার বি থেকে কল করছি তখন আমার আলাদাভাবে পুনঃনির্দেশ করা দরকার I
এটা কি কারাগারে করা যায়?
কন্ট্রোলার বি থেকে আমাকে কন্ট্রোলার এ -তে ক্রিয়া অ্যাকশনটি কল করতে হবে
কারণটি হ'ল যখন আমি কন্ট্রোলার বি থেকে কল করছি তখন আমার আলাদাভাবে পুনঃনির্দেশ করা দরকার I
এটা কি কারাগারে করা যায়?
উত্তর:
আপনি সেই ক্রিয়ায় পুনর্নির্দেশটি ব্যবহার করতে পারেন:
redirect_to your_controller_action_url
আরও চালু: রেল গাইড
নতুন ক্রিয়াটি কেবল রেন্ডার করতে:
redirect_to your_controller_action_url and return
render
পরিবর্তে হওয়া উচিত redirect_to
। আপনি কি বলছেন, @ এসপ্রেস?
redirect_to
ব্যবহারের অনুমতি দেয় না post: :method
এবং এটি বিশেষত create
অন্য কন্ট্রোলারের একটি ইতিমধ্যে বিদ্যমান ক্রিয়ায় পুনঃনির্দেশের জন্য কার্যকর হতে পারে যেহেতু @ddayan প্রথমবার জিজ্ঞাসা করেছিল। আমার একই পরিস্থিতি আছে যেখানে কিছু পরিস্থিতিতে আমার অন্য একটি জিনিস তৈরি করা উচিত। অন্য create
ক্রিয়াকলাপটি কল করা DRYer হতে পারে ..
অন্যের থেকে একজন নিয়ামক ব্যবহার করতে, এটি করুন:
def action_that_calls_one_from_another_controller
controller_you_want = ControllerYouWant.new
controller_you_want.request = request
controller_you_want.response = response
controller_you_want.action_you_want
end
controller_you_want
আপনার মধ্যে কার্যকর করাতে চানcontroller_you_want.process(:action_you_want)
render status: :ok, json: JSON.parse(controller.render(:action_you_want).first)
অন্যান্য নিয়ামক থেকে
controller_you_want.request
তবে এই গুলিটি একটি হ্যাশ বা পরামিতি উদাহরণ দিয়ে পাস করতে সক্ষম হয় নি।
params
কাছে উপলভ্য হতে controller_you_want
সেটিং দ্বারা request
3rd লাইনে। তুমি কি তাই জিজ্ঞাসা করছ?
render html: controller_you_want.process(:action_you_want)
আপনি যে যুক্তি উপস্থাপন করছেন তা এমভিসি নয়, তারপরেও নয়, সামঞ্জস্যপূর্ণ।
একটি নিয়ামক একটি দৃশ্য রেন্ডার করে বা পুনর্নির্দেশ করে
একটি পদ্ধতি কোড চালায়
এই বিবেচনাগুলি থেকে, আমি আপনাকে পরামর্শ দিচ্ছি যে আপনার নিয়ামকটিতে পদ্ধতি তৈরি করুন এবং আপনার ক্রিয়া থেকে তাদের কল করুন।
উদাহরণ:
def index
get_variable
end
private
def get_variable
@var = Var.all
end
এটি বলেছিল যে আপনি বিভিন্ন কন্ট্রোলারের মাধ্যমে ঠিক একই কাজ করতে পারবেন এবং আপনি বি বিতে থাকাকালীন নিয়ন্ত্রক এ থেকে একটি পদ্ধতি আহবান করতে পারেন mon
শব্দভাণ্ডার অত্যন্ত গুরুত্বপূর্ণ তাই আমি খুব জোর দিয়েছি।
get_variable
এখন অন্য নিয়ামক থেকে কিভাবে বলা যেতে পারে?
আপনি url_for
একটি নিয়ামক এবং ক্রিয়াটির জন্য ইউআরএল পেতে ব্যবহার করতে পারেন এবং তারপরে redirect_to
সেই URL এ যাওয়ার জন্য ব্যবহার করতে পারেন।
redirect_to url_for(:controller => :controller_name, :action => :action_name)
redirect_to url_for(:controller => :controller_name, :action => :action_name, :param1 => :val1, :param2 => :val2)
ফলাফল হবে /contorller_name/action_name?param1=val1¶m2=val2
। দস্তাবেজগুলি
এটি অন্য নিয়ামক ক্রিয়াকে কল করা খারাপ অভ্যাস।
তোমার উচিত
আমার মতামত:
তৃতীয় পদ্ধতিটি আমি প্রায়শই করতাম। সুতরাং আমি সামান্য উদাহরণ দেখাব।
def create
@my_obj = MyModel.new(params[:my_model])
if @my_obj.save
redirect_to params[:redirect_to] || some_default_path
end
end
সুতরাং আপনি এই ক্রিয়াকলাপের কাছে পাঠাতে পারেন redirect_to
, যা আপনি চাইলে যে কোনও পথ হতে পারে।
/models
বা একটি সাধারণ শ্রেণি বা মডিউল ইন /lib
) নকল করা এড়াতে পারেন । সমস্যা কেবলমাত্র যদি আপনার কন্ট্রোলার উদাহরণ ভেরিয়েবলের মাধ্যমে দর্শনটির সাথে যোগাযোগ করে - আপনাকে সেই নকলটি অন্য কোনও উপায়ে ঠিক করতে হবে d
সম্ভবত যুক্তিটি কোনও সহায়ক হিসাবে সরানো যেতে পারে? সহায়করা সমস্ত শ্রেণীর কাছে উপলব্ধ এবং নিয়ন্ত্রণ স্থানান্তর করে না। আপনি এটির মধ্যে পরীক্ষা করতে পারেন, সম্ভবত নিয়ামকের নামের জন্য, এটি কীভাবে ডাকা হয়েছিল তা দেখতে।
রচনা উদ্ধার!
কারণ হিসাবে দেওয়া হয়েছে, নিয়ন্ত্রকদের জুড়ে ক্রিয়াকলাপের পরিবর্তে কোডের ভাগ করা এবং কাস্টম অংশগুলি পৃথক করার জন্য নিয়ন্ত্রকদের ডিজাইন করা উচিত। এটি উভয় এড়াতে সহায়তা করবে - কোড সদৃশ এবং ব্রেকিং এমভিসি প্যাটার্ন।
যদিও এটি বিভিন্ন উপায়ে করা যেতে পারে, উদ্বেগগুলি ( রচনা ) ব্যবহার করা একটি ভাল অনুশীলন।
# controllers/a_controller.rb
class AController < ApplicationController
include Createable
private def redirect_url
'one/url'
end
end
# controllers/b_controller.rb
class BController < ApplicationController
include Createable
private def redirect_url
'another/url'
end
end
# controllers/concerns/createable.rb
module Createable
def create
do_usefull_things
redirect_to redirect_url
end
end
আশা করি এইটি কাজ করবে.
এই ফাংশনগুলি নিয়ন্ত্রকদের থেকে পৃথক করুন এবং এগুলি মডেল ফাইলে রাখুন। তারপরে আপনার নিয়ামকটিতে মডেল ফাইলটি অন্তর্ভুক্ত করুন।