как получить текущий абсолютный url в ruby на rails?

<p>как получить текущий <strong>абсолютный url</strong> в моем ruby в rails представлении?</p><p><code>request.request\_uri</code> возвращает только относительный url.</p>

<h3>для rails 3.2 или rails 4+</h3><p>вы должны использовать <code>request.original\_url</code>, чтобы получить текущий url.</p><p>этот метод описан в <a href="http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url">метод original\_url</a> , но если вам интересно, реализация такова:</p><pre><code>def original\_url base\_url + original\_fullpath end </code></pre><hr><h3>для rails 3:</h3><p>вы можете написать <code>"#{request.protocol}#{request.host\_with\_port}#{request.fullpath}"</code>, так как <code>request.url</code> устарела.</p><hr><h3>для rails 2:</h3><p>вы можете написать <code>request.url</code> вместо <code>request.request\_uri</code>. это объединяет протокол (обычно http: //) с хостом и request\_uri, чтобы дать вам полный адрес.</p>

<p>я думаю, что метод ruby on rails 3.0 теперь <code>request.fullpath</code>.</p>

<p>вы можете использовать <code>url\_for(:only\_path => false)</code></p>

<p>предупреждение о устранении: <a href="http://apidock.com/rails/actiondispatch/http/url/request\_uri">использование #request\_uri устарело</a> . вместо этого используйте полный путь. </p>

<p>если вы используете <strong>rails 3.2</strong> или <strong>rails 4</strong>, вы должны использовать <code>request.original\_url</code> для получения текущего url.</p><hr><p>документация по этому методу находится по адресу <a href="http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url">http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url</a> но если вам интересно, реализация такова:</p><pre><code>def original\_url base\_url + original\_fullpath end </code></pre>

<p>вы можете добавить этот метод <a href="http://grosser.it/2008/11/06/current\_url">current\_url</a> в applicationcontroller, чтобы вернуть текущий url и разрешить объединение других параметров</p><pre><code># 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 </code></pre><p><strong>пример использования:</strong></p><pre><code>current\_url --> http://... current\_url(:page=>4) --> http://...&page=4 </code></pre>

<p>для ruby on rails 3:</p><pre><code>request.url request.host\_with\_port </code></pre><p>я запустил сеанс отладчика и запросил объект запроса:</p><pre><code>request.public\_methods </code></pre>

<p>в ruby on rails 3.1.0.rc4:</p><pre><code> request.fullpath </code></pre>

<p>мне нужно приложение <a href="http://en.wikipedia.org/wiki/uniform\_resource\_locator">url</a> но с подкаталогом. я использовал:</p><pre><code>root\_url(:only\_path => false) </code></pre>

<pre><code> url\_for(params) </code></pre><p>и вы можете легко добавить новый параметр:</p><pre><code>url\_for(params.merge(:tag => "lol")) </code></pre>

<p>я думаю, что request.domain будет работать, но что если вы находитесь в подкаталоге, например, blah.blah.com? нечто подобное может сработать:</p><pre><code><%= request.env["http\_host"] + page = "/" + request.path\_parameters['controller'] + "/" + request.path\_parameters['action'] %> </code></pre><p>измените параметры в зависимости от вашей структуры пути. </p><p>надеюсь, это поможет!</p>

<p>похоже, что <code>request\_uri</code> устарела в ruby on rails 3.</p><pre><code>using #request\_uri is deprecated. use fullpath instead. </code></pre>

<p>это работает для ruby on rails 3.0 и должно поддерживаться большинством версий ruby on rails:</p><pre><code>request.env['request\_uri'] </code></pre>

<p>к сожалению, ни одно из предложений в этой ветке мне не помогло, кроме одного, где кто-то сказал, что он использовал отладчик, чтобы найти то, что он искал.</p><p>я создал несколько пользовательских страниц ошибок вместо стандартных 404 и 500, но <code>request.url</code> оканчивался на <code>/404</code> вместо ожидаемого <code>/non-existing-mumbo-jumbo</code>.</p><p>что мне нужно было использовать</p><pre><code>request.original\_url </code></pre>

<p>если под относительным вы подразумеваете просто без домена, то загляните в <code>request.domain</code>.</p>

<p>вы можете использовать метод ruby:</p><pre><code>:root\_url </code></pre><p>который получит полный путь с базовым url:</p><pre><code>localhost:3000/bla </code></pre>

<pre><code>(url\_for(:only\_path => false) == "/" )? root\_url : url\_for(:only\_path => false) </code></pre>

<p>в rails 3 вы можете использовать</p><pre><code>request.original\_url </code></pre><p> <a href="http://apidock.com/rails/v3.2.8/actiondispatch/request/original\_url">http://apidock.com/rails/v3.2.8/actiondispatch/request/original\_url</a> </p>

<p><strong> rails 4.0 </strong></p><p>вы можете использовать <code>request.original\_url</code>, вывод будет таким, как приведенный ниже пример</p><pre><code>get "/articles?page=2" request.original\_url # => "http://www.example.com/articles?page=2" </code></pre>

<p>если вы хотите быть конкретным, то есть знаете, какой путь вам нужен: </p><pre><code>link\_to current\_path(@resource, :only\_path => false), current\_path(@resource) </code></pre>

<p>вы можете использовать </p><pre><code>request.original\_url </code></pre><p>или же </p><pre><code>"#{request.protocol}#{request.host\_with\_port}" </code></pre><p>чтобы получить текущий url.</p>

<p>для rails 3:</p><blockquote> <p>request.fullpath</p> </blockquote>

<p><strong>для rails 3.2 или rails 4</strong> просто получите таким образом «request.original\_url» ссылка: <a href="http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url">оригинальный метод url</a> </p><p><strong>для rails 3</strong> так как request.url устарел. мы можем получить абсолютный путь путем объединения</p><pre><code>"#{request.protocol}#{request.host\_with\_port}#{request.fullpath}" </code></pre><p><strong>для rails 2</strong></p><pre><code>request.url </code></pre>

<p>вы можете использовать любой для rails 3.2:</p><pre><code>request.original\_url or request.env["http\_referer"] or request.env['request\_uri'] </code></pre><p>я думаю, что это будет работать везде</p><pre><code>"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}" </code></pre>

<pre><code>request.env["request\_uri"] </code></pre><p>работает в rails 2.3.4 проверено и не знает о других версиях.</p>

<p>получить url запроса без каких-либо параметров запроса.</p><pre><code>def current\_url\_without\_parameters request.base\_url + request.path end </code></pre>

<p>ты можешь использовать:</p><pre><code>request.full\_path </code></pre><p>или же </p><pre><code>request.url </code></pre><p>надеюсь, это решит вашу проблему.</p><p>ура</p>

<p>вы можете установить переменную на <code>uri.parse(current\_url)</code>, я пока не вижу здесь этого предложения, и оно работает для меня.</p>

<p>для rails 3.x и выше:</p><pre><code>#{request.protocol}#{request.host\_with\_port}#{request.fullpath} </code></pre><p>для rails 3.2 и выше:</p><pre><code>request.original\_url </code></pre><p>потому что в rails 3.2 и выше:</p><pre><code>request.original\_url = request.base\_url + request.original\_fullpath </code></pre><p>для получения дополнительной информации, пожалуйста, посетите <a href="http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url">http://api.rubyonrails.org/classes/actiondispatch/request.html#method-i-original\_url</a> </p>

<p><strong>rails 4</strong></p><p>контроллер:</p><pre><code>def absolute\_url request.base\_url + request.original\_fullpath end </code></pre><p><strong>action mailer заметные изменения в <a href="http://guides.rubyonrails.org/4\_2\_release\_notes.html">выпуск 4.2</a> :</strong></p><p>link\_to и url\_for генерируют абсолютные url по умолчанию в шаблонах, больше не нужно передавать only\_path: false. (commit)</p><p>посмотреть:</p><p>если вы используете суффикс <code>\_url</code>, сгенерированный url является абсолютным. используйте <code>\_path</code>, чтобы получить относительный url.</p><pre><code><%= link\_to "home", root\_url %> </code></pre><p>для получения более подробной информации, перейдите по ссылке:</p><p> <a href="http://blog.grepruby.com/2015/04/absolute-url-full-url-in-rails-4.html">http://blog.grepruby.com/2015/04/absolute-url-full-url-in-rails-4.html</a> </p>

<p>чтобы получить абсолютный url, который означает, что <code>from the root</code> может отображаться следующим образом </p><pre><code><%= link\_to 'edit', edit\_user\_url(user) %> </code></pre><p>помощник users\_url генерирует url, который включает протокол и имя хоста помощник users\_path генерирует только часть пути.</p><pre><code>users\_url: http://localhost/users users\_path: /users </code></pre>