Абсолютные URL по всему приложению в Rails 3 - PullRequest
1 голос
/ 23 ноября 2010

Заранее извините за длину вопроса, но я хотел бы обобщить свои знания до этого момента и попытаться быстрее найти правильное решение.

У меня есть приложение, которое иногда будет встроено в другоестраница интернета.Чтобы упростить объяснение, представьте себе один сервер, который обслуживает обычное приложение или версию приложения для встраивания, в зависимости от имени домена.

Для последнего домена ссылки, которые приложение генерирует с помощью link_to, product_url, image_tag и т. д. должны быть абсолютными (http://servername/images/image_01.jpg), а для первых они должны быть относительными (я думаю, если я не могу решить эту проблему элегантно).

Я знаю, что яможет генерировать абсолютные URL, используя, например, product_url(:id, [...], :host => request.host, :port => request.port), но я вижу две проблемы с этим подходом.Во-первых, кажется неэффективным переписывать этот код в каждом запросе ссылки в каждом представлении.Во-вторых, когда приложение работает само по себе, а не встраивается, я бы предпочел иметь относительные URL-адреса для эффективности и рекомендаций.

Для статических ресурсов можно сделать следующее в config / средах / где угодно.rb: config.action_controller.asset_host = "http://assets.example.com"

Но это не влияет на ссылки, сгенерированные Rails.

Я искал ответ на этот вопрос в течение нескольких дней, и у меня нет ничего текущего для Rails3. Здесь есть старый фрагмент кода, который делает трюк для Rails 2:

http://opensoul.org/2009/2/21/force-absolute-urls

Но, похоже, он не работает для Rails 3. Так ...

  1. Должен ли я сделать какую-нибудь вспомогательную функцию, которая определяет, будут ли вставляться ссылки?
  2. Патч url_for, чтобы он работал так, как я хочу, без изменений представления приложения?
  3. Переписать все мои файлы просмотра в любом случае?

Заранее спасибо за любые ответы.

Приветствия,

Зев

1 Ответ

1 голос
/ 23 ноября 2010

Я искал источники, и похоже, что Rails 3.0 не поддерживает установку по умолчанию.Я бы, вероятно, пошел на патч обезьяны url_for, если у вас нет веских причин не делать этого.

Существует опция :only_path, если вы либо задаете значение по умолчанию true, либо значение по умолчанию на основе домена,В настоящее время по умолчанию используется опция :host.Этот патч может сломать некоторые не очень хорошо закодированные плагины, убедитесь, что вы хорошо их протестировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...