আমার রবি অন রেলস ভিউতে আমি কীভাবে বর্তমান পরম URL পেতে পারি?
request.request_uri
শুধুমাত্র আপেক্ষিক ফেরৎ URL টি ।
আমার রবি অন রেলস ভিউতে আমি কীভাবে বর্তমান পরম URL পেতে পারি?
request.request_uri
শুধুমাত্র আপেক্ষিক ফেরৎ URL টি ।
উত্তর:
request.original_url
আপনার বর্তমান URL টি পেতে ব্যবহার করা উচিত ।
এই পদ্ধতিটি মূল_আরল পদ্ধতিতে নথিভুক্ত করা হয়েছে তবে আপনি যদি আগ্রহী হন তবে বাস্তবায়নটি হ'ল:
def original_url
base_url + original_fullpath
end
আপনি লিখতে পারেন "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, যেহেতু request.url
এখন অবহেলিত।
আপনি লিখতে পারেন request.url
পরিবর্তে request.request_uri
। এটি হোস্টের সাথে প্রোটোকল (সাধারণত HTTP: //) একত্রিত করে এবং আপনাকে সম্পূর্ণ ঠিকানা দেওয়ার জন্য অনুরোধ_রি।
fullpath
প্রোটোকল / ডোমেন / পোর্ট অন্তর্ভুক্ত করে না! এটি পরম ইউআরএল নয়!
"http://#{request.host+request.fullpath}"
কাজ করবে বা অন্যথায়, (বন্দরটি গুরুত্বপূর্ণ হলে)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
অবমানিত দাবিটির জন্য আপনি কি কোনও রেফারেন্স নির্দেশ করতে পারেন ? প্রস্তাবিত সমাধানটি request.url
ইতিমধ্যে যা করে তা বলার দীর্ঘ পথ ; বাস্তবায়ন হ'ল প্রোটোকল + হোস্ট_উইথ_পোর্ট + ফুলপথ ( github.com/rails/rails/blob/… )
আপনি ব্যবহার করতে পারেন url_for(only_path: false)
অবমূল্যায়ন সতর্কতা: # অনুরোধ_উরি ব্যবহার করা হ্রাস করা হয়েছে । পরিবর্তে ফুলপথ ব্যবহার করুন।
request.uri
এবং ইতিমধ্যে এই প্রশ্নটিতে বেশ কয়েকবার নির্দেশ করা হয়েছে, তবে ... ঠিক আছে, ধন্যবাদ
আপনি যদি R.২ বা ails টি রেল ব্যবহার করছেন তবে আপনার request.original_url
বর্তমান ইউআরএলটি ব্যবহার করা উচিত ।
পদ্ধতির জন্য ডকুমেন্টেশনটি http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url এ রয়েছে তবে আপনি যদি আগ্রহী হন তবে বাস্তবায়নটি হ'ল:
def original_url
base_url + original_fullpath
end
আপনি বর্তমান ইউআরএল ফিরে আসতে অ্যাপ্লিকেশন নিয়ন্ত্রণকারীটিতে এই কারেন্ট_আরল পদ্ধতিটি যুক্ত করতে পারেন এবং অন্যান্য প্যারামিটারগুলিতে মার্জ করার অনুমতি দিতে পারেন
# https://x.com/y/1?page=1
# + current_url( :page => 3 )
# = https://x.com/y/1?page=3
def current_url(overwrite={})
url_for :only_path => false, :params => params.merge(overwrite)
end
ব্যবহারের উদাহরণ:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
url_for params.merge(:format => "PDF", :only_path => false)
link_to
কেবল ব্যবহার করতে params.merge
এবং url_for
সম্পূর্ণরূপে এড়িয়ে যেতে পারেন
রুবে অন রিয়েলস ৩.১.০.সিআরসি:
request.fullpath
fullpath
absolute URL
অনুরোধ করা মূল পোস্টার হিসাবে একটি সরবরাহ করে না ।
url_for(params)
এবং আপনি সহজেই কিছু নতুন প্যারামিটার যুক্ত করতে পারেন:
url_for(params.merge(:tag => "lol"))
আমি মনে করি অনুরোধ.ডোমেনটি কাজ করবে তবে আপনি যদি ব্লাহ.ব্লাহ.কমের মতো কোনও উপ ডিরেক্টরিতে থাকেন তবে কী হবে? এরকম কিছু কাজ করতে পারে:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
আপনার পাথ কাঠামোর উপর ভিত্তি করে প্যারামিটারগুলি পরিবর্তন করুন।
আশা করি এইটি কাজ করবে!
রুবেল 1.9.3-p194 এবং রুবেল ব্যবহার করে 3.2.6:
যদি অনুরোধ.ফুলপথ আপনার পক্ষে কাজ করে না, অনুরোধ করে চেষ্টা করুন। "[HTTP_REFERER"]
নীচে আমার গল্প এখানে।
ক্রমযুক্ত পাতাগুলির জন্য বর্তমান ইউআরএল (যা তার ব্রাউজারে ব্যবহারকারীর জন্য ঠিকানা বারে প্রদর্শিত হয়) সনাক্ত করার ক্ষেত্রে আমি একই রকম সমস্যা পেয়েছি, উদাহরণস্বরূপ http://localhost:3002/users/1/history/issues
,।
ব্যবহারকারী বিভিন্ন ধরণের ইস্যুগুলির তালিকায় স্যুইচ করতে পারেন। এই সমস্ত তালিকা বিভিন্ন কন্ট্রোলার / পার্টিয়াল (পুনরায় লোড না করে) থেকে আজাক্সের মাধ্যমে লোড করা হয় are
সমস্যাটি ছিল তালিকার প্রতিটি আইটেমের পিছনের বোতামটির সঠিক পথ নির্ধারণ করা যাতে পিছনের বোতামটি তার নিজের পৃষ্ঠাতে এবং संचयी পৃষ্ঠার ইতিহাসে উভয়ই সঠিকভাবে কাজ করতে পারে ।
আমি যদি অনুরোধ.ফুলপথ ব্যবহার করি তবে এটি সর্বশেষ জাভাস্ক্রিপ্ট অনুরোধের পথটি ফিরিয়ে দেয় যা অবশ্যই অনুসন্ধান করা URL নয়।
সুতরাং আমি অনুরোধ.env ["HTTP_REFERER"] ব্যবহার করেছি যা সর্বশেষ পুনরায় লোড করা অনুরোধটির URL টি সঞ্চয় করে।
সিদ্ধান্ত নেওয়ার জন্য আংশিক অংশের একটি অংশ এখানে
- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
- back_url = user_history_issue_path(@user, list: "needed_type")
- else
- back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote
এটি রুবে অন রেল 3.0.০ এর জন্য কাজ করে এবং রেল অন রুবেলের বেশিরভাগ সংস্করণ দ্বারা সমর্থন করা উচিত:
request.env['REQUEST_URI']
থ্রেডে এখানে দেওয়া পরামর্শগুলির কোনওোটাই দুঃখের সাথে আমাকে সহায়তা করেনি, যেখানে কেউ বলেছিলেন যে তিনি ডিবাগারটি তার সন্ধান করছেন তা খুঁজে পেতে ব্যবহার করেছেন।
আমি স্ট্যান্ডার্ড 404 এবং 500 এর পরিবর্তে কিছু কাস্টম ত্রুটি পৃষ্ঠা তৈরি করেছি তবে প্রত্যাশার পরিবর্তে request.url
শেষ হয়েছি ।/404
/non-existing-mumbo-jumbo
আমার যা ব্যবহার করার দরকার ছিল তা ছিল
request.original_url
আপনি রুবি পদ্ধতিটি ব্যবহার করতে পারেন:
:root_url
যা বেস url সহ পুরো পথ পাবে:
localhost:3000/bla
:root_url
পেতে কিছু ব্যবহার করি তখন আমি কীভাবে পরম URLগুলিতে সীমাবদ্ধ করতে পারি ? ধরুন আমি কিছুটা এর মতোই some_method(:products_brand_url, brand: brand, entity_name: "brand")
এবং some_method
এটি সংজ্ঞায়িত করা হয়েছে `Def some_method (রুট, অপটস = {}) প্রান্ত` আমি আমার রুটটি দেখতে দেখতে চাই না - http://localhost:3000/brands/brand_name?&entity_name="brand"
। আমি রুটটি দেখতে দেখতে চাই http://localhost:3000/brands/brand_name
। আমি কেবল entity_name
অপ্ট হ্যাশের অংশ হতে চাই এবং পরম ইউআরএলটির প্যারাম হিসাবে নয়।
root_url
।
রেল 3 এ আপনি ব্যবহার করতে পারেন
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
রেল 4.0
আপনি ব্যবহার করতে পারেন request.original_url
, আউটপুট নীচের উদাহরণ হিসাবে দেওয়া হবে
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
পাগল 3.2 বা পাগল 4 কেবলমাত্র এই ভাবে পেতে "request.original_url" রেফারেন্স: আসল UR পদ্ধতি
রেল 3 এর জন্য অনুরোধ হিসাবে.আরল অবচিত করা হয়েছে conc আমরা সম্মতি দিয়ে নির্ভুল পথ পেতে পারি
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
রেলের জন্য 2
request.url
request.env["REQUEST_URI"]
২.৩.৪ পরীক্ষিত রেলগুলিতে কাজ করে এবং অন্যান্য সংস্করণ সম্পর্কে জানে না।
আপনি হয় ব্যবহার করতে পারেন
request.original_url
অথবা
"#{request.protocol}#{request.host_with_port}"
বর্তমান ইউআরএল পেতে।
তুমি ব্যবহার করতে পার:
request.full_path
অথবা
request.url
আশা করি এটি আপনার সমস্যার সমাধান করবে।
চিয়ার্স
পরম ইউআরএল পেতে যার অর্থ এটি এর from the root
মতো প্রদর্শিত হতে পারে
<%= link_to 'Edit', edit_user_url(user) %>
ব্যবহারকারী_আরএল সাহায্যকারী একটি ইউআরএল উত্পন্ন করে যা প্রোটোকল এবং হোস্টের নাম অন্তর্ভুক্ত করে। ব্যবহারকারী_পথ সাহায্যকারী কেবল পথের অংশ তৈরি করে।
users_url: http://localhost/users
users_path: /users