මගේ රූබි ඔන් රේල්ස් දර්ශනයේ වත්මන් නිරපේක්ෂ URL ලබා ගන්නේ කෙසේද ?
මෙම request.request_uri
පමණක් සාපේක්ෂ නැවත URL එක .
මගේ රූබි ඔන් රේල්ස් දර්ශනයේ වත්මන් නිරපේක්ෂ URL ලබා ගන්නේ කෙසේද ?
මෙම request.request_uri
පමණක් සාපේක්ෂ නැවත URL එක .
Answers:
request.original_url
වත්මන් URL ලබා ගැනීමට ඔබ භාවිතා කළ යුතුය .
මෙම ක්රමය original_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: //) ධාරකය සමඟ ඒකාබද්ධ කරන අතර ඔබට සම්පූර්ණ ලිපිනය ලබා දීමට request_uri.
fullpath
හි ප්රොටෝකෝලය / වසම / වරාය ඇතුළත් නොවේ! එය නිරපේක්ෂ URL එකක් නොවේ!
"http://#{request.host+request.fullpath}"
(වරාය වැදගත් නම්)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
අවලංගු කරන ලද හිමිකම් පෑම සඳහා යොමු කිරීමක් ඔබට යොමු කළ හැකිද ? යෝජිත විසඳුම request.url
දැනටමත් කරන දේ කීමට බොහෝ දුරක් පමණි ; ක්රියාත්මක කිරීම හුදෙක් ප්රොටෝකෝලය + host_with_port + fullpath ( github.com/rails/rails/blob/… )
ඔබට භාවිතා කළ හැකිය url_for(only_path: false)
අවලංගු කිරීමේ අවවාදය: #request_uri භාවිතා කිරීම අවලංගු කර ඇත . ඒ වෙනුවට ෆුල්පාත් භාවිතා කරන්න.
request.uri
ඔබ රේල්ස් 3.2 හෝ රේල්ස් 4 භාවිතා request.original_url
කරන්නේ නම් වත්මන් URL එක ලබා ගැනීමට ඔබ භාවිතා කළ යුතුය .
ක්රමය සඳහා ප්රලේඛනය http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url හි ඇත, නමුත් ඔබ කුතුහලයෙන් සිටී නම් ක්රියාත්මක කිරීම:
def original_url
base_url + original_fullpath
end
වත්මන් URL ය නැවත ලබා දීමට සහ වෙනත් පරාමිතීන් සමඟ ඒකාබද්ධ වීමට ඉඩ දීම සඳහා ඔබට මෙම වත්මන්_උර්ල් ක්රමය ApplicationController හි එක් කළ හැකිය
# 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
රූබි ඔන් රේල්ස් 3.1.0.rc4:
request.fullpath
fullpath
absolute URL
ඉල්ලූ මුල් පෝස්ටරය ලබා නොදේ .
url_for(params)
ඔබට පහසුවෙන් නව පරාමිතීන් කිහිපයක් එකතු කළ හැකිය:
url_for(params.merge(:tag => "lol"))
මම හිතන්නේ request.domain වැඩ කරයි, නමුත් ඔබ blah.blah.com වැනි උප නාමාවලියක සිටී නම් කුමක් කළ යුතුද? මේ වගේ දෙයක් වැඩ කරන්න පුළුවන්:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
ඔබේ මාර්ග ව්යුහය මත පදනම්ව පරාමිතීන් වෙනස් කරන්න.
උපකාරවත් වන බලාපොරොත්තුව!
එය වගේ request_uri
රේල් පීලි 3 දා රූබි ප්රතික්ෂේප කරයි.
Using #request_uri is deprecated. Use fullpath instead.
රූබි 1.9.3-පි 194 සහ රූබි ඔන් රේල්ස් 3.2.6 භාවිතා කිරීම:
Request.fullpath ඔබ වෙනුවෙන් ක්රියා නොකරන්නේ නම්, request.env උත්සාහ කරන්න ["HTTP_REFERER"]
මෙන්න මගේ කතාව පහතින්.
විවිධ පාලකයන්ගේ තොරතුරු ඒකාබද්ධ කරන සමුච්චිත පිටු සඳහා වත්මන් URL (ඇගේ බ්රව්සරයේ පරිශීලකයා සඳහා ලිපින තීරුවේ පෙන්වා ඇත) සොයා ගැනීමේදී මට සමාන ගැටළුවක් ඇතිවිය http://localhost:3002/users/1/history/issues
.
පරිශීලකයාට විවිධ ආකාරයේ ගැටළු ලැයිස්තුවකට මාරු විය හැකිය. එම ලැයිස්තු සියල්ලම විවිධ පාලක / කොටස් වලින් (නැවත පූරණය නොකර) අජැක්ස් හරහා පටවනු ලැබේ.
ගැටළුව වූයේ ලැයිස්තුවේ සෑම අයිතමයකම පිටුපස බොත්තම සඳහා නිවැරදි මාර්ගය සැකසීමයි, එවිට පිටුපස බොත්තම එහි පිටුවේ මෙන්ම සමුච්චිත පිටු ඉතිහාසයේද නිවැරදිව ක්රියා කළ හැකිය .
මම request.fullpath භාවිතා කරන්නේ නම් , එය අවසාන ජාවාස්ක්රිප්ට් ඉල්ලීමේ මාවත ලබා දෙයි, එය නියත වශයෙන්ම මා සොයන URL නොවේ.
එබැවින් මම නැවත පූරණය කළ ඉල්ලීමේ URL එක ගබඩා කරන request.env ["HTTP_REFERER"] භාවිතා කළෙමි .
තීරණයක් ගැනීම සඳහා අර්ධ වශයෙන් උපුටා ගැනීමක් මෙන්න
- 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
ලබා ගැනීමට මා කැමති දෙයක් භාවිතා කරන විට නිරපේක්ෂ යූආර්එල් වෙත මා යොමු කරන පරාමිතීන් සීමා කරන්නේ කෙසේදැයි කරුණාකර මට කියන්න පුළුවන්ද ? මම යම් තරමකට සමාන යැයි උපකල්පනය some_method(:products_brand_url, brand: brand, entity_name: "brand")
කර some_method
එය අර්ථ දක්වනුයේ `def some_method (මාර්ගය, opts = {}) end` මගේ ගමන් මාර්ගය පෙනෙන්නට මා කැමති නැත - http://localhost:3000/brands/brand_name?&entity_name="brand"
. මට මාර්ගය පෙනෙන්නට අවශ්යයි http://localhost:3000/brands/brand_name
. මට අවශ්ය entity_name
වන්නේ එය නිරපේක්ෂ url හි පරාමිතීන් ලෙස නොව ඔප්ට්ස් හැෂ් හි කොටසක් වීමයි.
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" යොමුව: මුල් URL ක්රමය
රේල් පීලි 3 සඳහා request.url අතහැර දමා ඇත. අපට සමෝධානික වීමෙන් නිරපේක්ෂ මාර්ගයක් ලබා ගත හැකිය
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
රේල් පීලි 2 සඳහා
request.url
ඔබට නිශ්චිත, අර්ථයක් වීමට අවශ්ය නම්, ඔබට අවශ්ය මාර්ගය ඔබ දන්නවා:
link_to current_path(@resource, :only_path => false), current_path(@resource)
request.env["REQUEST_URI"]
රේල් පීලි 2.3.4 පරීක්ෂා කර ඇති අතර වෙනත් අනුවාදයන් ගැන නොදනී.
ඔබට භාවිතා කළ හැකිය
request.original_url
හෝ
"#{request.protocol}#{request.host_with_port}"
වත්මන් URL ලබා ගැනීමට.
ඔයාට පාවිච්චි කරන්න පුළුවන්:
request.full_path
හෝ
request.url
එය ඔබගේ ගැටලුව විසඳනු ඇතැයි බලාපොරොත්තු වෙමු.
චියර්ස්
නිරපේක්ෂ URL ලබා ගැනීම සඳහා from the root
එය මේ ආකාරයෙන් පෙන්විය හැකිය
<%= link_to 'Edit', edit_user_url(user) %>
User_url උදව්කරු විසින් ප්රොටෝකෝලය සහ ධාරක නාමය ඇතුළත් URL එකක් ජනනය කරයි. User_path සහායකයා ජනනය කරන්නේ මාර්ග කොටස පමණි.
users_url: http://localhost/users
users_path: /users