আমি কীভাবে রেল অন রুবেলে বর্তমান পরম ইউআরএল পাব?


1052

আমার রবি অন রেলস ভিউতে আমি কীভাবে বর্তমান পরম URL পেতে পারি?

request.request_uriশুধুমাত্র আপেক্ষিক ফেরৎ URL টি


আপনি রেল 4 এর জন্য একবার দেখতে পারেন: blog.grepruby.com/2015/04/absolve-url-full-url-in-rails-4.html
user3118220

উত্তর:


1442

Ails.২ বা ails+ রেলগুলির জন্য

request.original_urlআপনার বর্তমান URL টি পেতে ব্যবহার করা উচিত ।

এই পদ্ধতিটি মূল_আরল পদ্ধতিতে নথিভুক্ত করা হয়েছে তবে আপনি যদি আগ্রহী হন তবে বাস্তবায়নটি হ'ল:

def original_url
  base_url + original_fullpath
end

রেল 3:

আপনি লিখতে পারেন "#{request.protocol}#{request.host_with_port}#{request.fullpath}", যেহেতু request.urlএখন অবহেলিত।


রেল 2:

আপনি লিখতে পারেন request.urlপরিবর্তে request.request_uri। এটি হোস্টের সাথে প্রোটোকল (সাধারণত HTTP: //) একত্রিত করে এবং আপনাকে সম্পূর্ণ ঠিকানা দেওয়ার জন্য অনুরোধ_রি।


31
অন্যান্য ব্যবহারকারীদের হিসাবে ইঙ্গিত: অবনতি সতর্কতা: # অনুরোধ_উরি ব্যবহার করা হ্রাস করা হয়েছে। পরিবর্তে ফুলপথ ব্যবহার করুন
গিলাদবু

9
@ গিলাডবু fullpathপ্রোটোকল / ডোমেন / পোর্ট অন্তর্ভুক্ত করে না! এটি পরম ইউআরএল নয়!
অ্যালান এইচ।

37
"http://#{request.host+request.fullpath}"কাজ করবে বা অন্যথায়, (বন্দরটি গুরুত্বপূর্ণ হলে)"http://#{request.host}:#{request.port+request.fullpath}"
নিলোক

7
যদি বন্দর গুরুত্বপূর্ণ, এটি সঠিকভাবে কাজ করে: "http://#{request.host}:#{request.port}#{request.fullpath}"
Sucrenoir

3
request.urlঅবমানিত দাবিটির জন্য আপনি কি কোনও রেফারেন্স নির্দেশ করতে পারেন ? প্রস্তাবিত সমাধানটি request.urlইতিমধ্যে যা করে তা বলার দীর্ঘ পথ ; বাস্তবায়ন হ'ল প্রোটোকল + হোস্ট_উইথ_পোর্ট + ফুলপথ ( github.com/rails/rails/blob/… )
মার্চল

134

আমি মনে করি যে রুবেল অন রেলস 3.0 পদ্ধতিটি এখন request.fullpath


13
ফুলপথ ডোমেনটি অন্তর্ভুক্ত করে না
লুলালালা

আমি খুশি যে এটি সরবরাহ করা হয়েছিল কারণ আমি কীভাবে ডোমেনটি অন্তর্ভুক্ত করতে পারি না তা অনুসন্ধান করছি।
জ্যাক

121

আপনি ব্যবহার করতে পারেন url_for(only_path: false)


আমার (কিছুটা বিশেষ ক্ষেত্রে) এটি হ'ল আমি যা চেয়েছিলাম ঠিক ঠিক তাই। আমি কেবল বিকল্পটি সত্যে পরিবর্তিত করেছি এবং কোনও বিকল্প ছাড়াই বর্তমান পৃষ্ঠার url পেয়েছি। ধন্যবাদ :)
সর্পিলিস

@ ডেভিড ভিউতে নেই এটি করে না। তবে এটি কোনওভাবেই সেখানে ব্যবহার করা উচিত নয়))
লুবেন তোদোরভ

আমার ক্ষেত্রে আমি হোস্টের নাম পরিবর্তন করতে চেয়েছিলাম তবে সমস্ত কিছু রাখি। আমি দেখতে পেলাম যে url_for (হোস্ট: 'www.newdomain.com') সমস্যার সমাধান হিসাবে আমার পক্ষে সবচেয়ে ভাল কাজ করেছে। আইএমও, রেলের সমস্ত সংস্করণ জুড়ে একইরূপে এটি এর থেকে আরও দৃ .় সমাধান।
PeppyHeppy

1
FYI একই সংস্থানটির জন্য যদি আপনার একাধিক পাথ থাকে তবে এটি কাজ করবে না।
thekingoftruth

68

অবমূল্যায়ন সতর্কতা: # অনুরোধ_উরি ব্যবহার করা হ্রাস করা হয়েছে । পরিবর্তে ফুলপথ ব্যবহার করুন।


4
উত্তরে নোট দেখুন stackoverflow.com/a/2165727/166279 , fullpath ডোমেইন অন্তর্ভুক্ত নয়।
নিলোক

ব্যবহার করার সময় এই লাইনটি লেখার সময় সরাসরি লগ থেকে এসেছিল request.uriএবং ইতিমধ্যে এই প্রশ্নটিতে বেশ কয়েকবার নির্দেশ করা হয়েছে, তবে ... ঠিক আছে, ধন্যবাদ
বাস্তুতত্ত্ব

1
@ মনিশশ্রীবাস্তব: মজার বিষয়, সমস্ত "মূল" প্রচেষ্টা সত্ত্বেও আমি আরও জটিল প্রশ্নের উত্তর দিয়েছি, এই অনুলিপি এবং পেস্টটি আমাকে সর্বোচ্চ স্কোর দিয়েছে, ভাল ... কিছুই না থেকে ভাল
পরিবেশগত

61

আপনি যদি 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

52

আপনি বর্তমান ইউআরএল ফিরে আসতে অ্যাপ্লিকেশন নিয়ন্ত্রণকারীটিতে এই কারেন্ট_আরল পদ্ধতিটি যুক্ত করতে পারেন এবং অন্যান্য প্যারামিটারগুলিতে মার্জ করার অনুমতি দিতে পারেন

# 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

1
এটি রেল ৩.১ এ সংজ্ঞায়িত করা হয় না।
অ্যালান এইচ।

1
আপনি এটি এইভাবে করতে পারতেনurl_for params.merge(:format => "PDF", :only_path => false)
মন্ট্রিআল্মিকে

2
এছাড়াও যদি আপনি একটি থাকেন তবে আপনি link_toকেবল ব্যবহার করতে params.mergeএবং url_forসম্পূর্ণরূপে এড়িয়ে যেতে পারেন
মন্ট্রিআল্মিকে

36

রুবেলের জন্য রেল 3:

request.url
request.host_with_port

আমি একটি ডিবাগার সেশন বরখাস্ত করেছি এবং অনুরোধের বিষয়টিটি অনুসন্ধান করেছি:

request.public_methods



27
 url_for(params)

এবং আপনি সহজেই কিছু নতুন প্যারামিটার যুক্ত করতে পারেন:

url_for(params.merge(:tag => "lol"))

5
এটি অনুমোদিত উত্তরের চেয়ে অনেক বেশি মার্জিত (যদি দানাদার কম থাকে)।
অলিভিয়ার লাকান

16

আমি মনে করি অনুরোধ.ডোমেনটি কাজ করবে তবে আপনি যদি ব্লাহ.ব্লাহ.কমের মতো কোনও উপ ডিরেক্টরিতে থাকেন তবে কী হবে? এরকম কিছু কাজ করতে পারে:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

আপনার পাথ কাঠামোর উপর ভিত্তি করে প্যারামিটারগুলি পরিবর্তন করুন।

আশা করি এইটি কাজ করবে!


8
হ্যাঁ জাইমের উত্তরটি আরও ভাল, তবে আপনি যদি সত্যিই অদক্ষ হতে চান তবে আপনি এটি আমার উপায়ে করতে পারতেন।
জেমস এম

14

দেখে মনে হচ্ছে request_uriএটি রুবেলে অনুলিপি 3 এ ছড়িয়েছে।

Using #request_uri is deprecated. Use fullpath instead.

13

রুবেল 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

হ্যাঁ, ফুলপথ আপনাকে অনুরোধ করা url দেয়, আপনি যে url থেকে এসেছিলেন তা নয় , যা আমার পাশাপাশি প্রয়োজন as এর জন্য ধন্যবাদ!
স্পেন্সার রথবুন

2
দুর্দান্ত কাজ করে, যা আমার প্রয়োজন ছিল। এটি পৃথক প্রশ্ন এবং উত্তর হওয়া উচিত। কিন্ডা এখানে খুঁজে পাওয়া কঠিন। : /
ডিডিডিডি

12

এটি রুবে অন রেল 3.0.০ এর জন্য কাজ করে এবং রেল অন রুবেলের বেশিরভাগ সংস্করণ দ্বারা সমর্থন করা উচিত:

request.env['REQUEST_URI']

11

থ্রেডে এখানে দেওয়া পরামর্শগুলির কোনওোটাই দুঃখের সাথে আমাকে সহায়তা করেনি, যেখানে কেউ বলেছিলেন যে তিনি ডিবাগারটি তার সন্ধান করছেন তা খুঁজে পেতে ব্যবহার করেছেন।

আমি স্ট্যান্ডার্ড 404 এবং 500 এর পরিবর্তে কিছু কাস্টম ত্রুটি পৃষ্ঠা তৈরি করেছি তবে প্রত্যাশার পরিবর্তে request.urlশেষ হয়েছি ।/404/non-existing-mumbo-jumbo

আমার যা ব্যবহার করার দরকার ছিল তা ছিল

request.original_url

9

যদি আপেক্ষিকভাবে, আপনি কেবল ডোমেন ছাড়াই বোঝাতে চান, তবে সন্ধান করুন request.domain



8

আপনি রুবি পদ্ধতিটি ব্যবহার করতে পারেন:

:root_url

যা বেস url সহ পুরো পথ পাবে:

localhost:3000/bla

এটিই কেবলমাত্র সমাধান যা রেল 4-এ অ্যাক্টিভ_মোডেল_সিরিয়রিজার ব্যবহার করে সিরিয়ালায় কাজ করে
ক্রিস

আপনি কি দয়া করে আমাকে বলতে পারেন যে আমি যখন পরম ইউআরএলটি :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
স্মার্টার্ট


6

আপনি রেল 3.2 এর জন্য যে কোনও একটি ব্যবহার করতে পারেন:

request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']

আমি মনে করি এটি যেখানেই কাজ করবে

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

6

রেল 4.0

আপনি ব্যবহার করতে পারেন request.original_url, আউটপুট নীচের উদাহরণ হিসাবে দেওয়া হবে

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"

4

পাগল 3.2 বা পাগল 4 কেবলমাত্র এই ভাবে পেতে "request.original_url" রেফারেন্স: আসল UR পদ্ধতি

রেল 3 এর জন্য অনুরোধ হিসাবে.আরল অবচিত করা হয়েছে conc আমরা সম্মতি দিয়ে নির্ভুল পথ পেতে পারি

"#{request.protocol}#{request.host_with_port}#{request.fullpath}"

রেলের জন্য 2

request.url

3

যদি আপনি নির্দিষ্ট হতে চান, অর্থ, আপনি আপনার প্রয়োজনীয় পথটি জানেন:

link_to current_path(@resource, :only_path => false), current_path(@resource)



3

কোনও জিজ্ঞাসা পরামিতি ছাড়াই অনুরোধ URL পেতে।

def current_url_without_parameters
  request.base_url + request.path
end

3

আপনি হয় ব্যবহার করতে পারেন

request.original_url 

অথবা

"#{request.protocol}#{request.host_with_port}" 

বর্তমান ইউআরএল পেতে।



1

আপনি এখানে একটি পরিবর্তনশীল সেট করতে পারেন URI.parse(current_url), আমি এখনও এই প্রস্তাবটি দেখতে পাচ্ছি না এবং এটি আমার পক্ষে কাজ করে।


0

পরম ইউআরএল পেতে যার অর্থ এটি এর from the rootমতো প্রদর্শিত হতে পারে

<%= link_to 'Edit', edit_user_url(user) %>

ব্যবহারকারী_আরএল সাহায্যকারী একটি ইউআরএল উত্পন্ন করে যা প্রোটোকল এবং হোস্টের নাম অন্তর্ভুক্ত করে। ব্যবহারকারী_পথ সাহায্যকারী কেবল পথের অংশ তৈরি করে।

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