Можно ли визуализировать партиалы из приложения Ruby on Rails в другое? - PullRequest
0 голосов
/ 10 января 2011

У меня есть два приложения RoR3 ( APP1 и APP2 )

  • www.subdomain1.example.com
  • www.subdomain2.example.com

и я хочу показать на APP1 некоторые виды из APP2 .

Я пытался сделать это, используяЗапрос 'Net :: HTTP' (код в APP1 )

Net::HTTP.get( URI.parse("http://www.subdomain2.example.com/users/new") )

, но ответ не оценивается как код HTTP.Помимо прочего, я не знаю, есть ли другие методы, чтобы сделать то, что я хочу, более простым способом.

Итак, возможно ли отобразить партиалы от APP1 до APP2 с использованием обычного и простого подхода рендеринга частей в одном и том же приложении RoR?

Пример:

render :partial => "/users/new"

Если так, как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 10 января 2011

Вот, попробуйте это:

module ApplicationHelper
  require 'open-uri'

  def render_url(url)
    open url do |f|
      f.read.html_safe   # remove the 'html_safe' if you're on Rails 2.x
    end
  end
end

На ваш взгляд:

<%= render_url 'http://ilikestuffblog.com/' %>

Это будет работать. Однако есть только одна проблема: если сайт содержит относительные ссылки на изображения, другие страницы или что-либо еще, эти ссылки не будут отображаться правильно. Попробуйте это, чтобы увидеть кучу пустых изображений:

<%= render_url 'http://www.ducklet.com/' %>

Кроме того, имейте в виду, что если вы не владеете URL, который вы включаете, вы будете подвержены странным сценариям межсайтового скриптинга.

1 голос
/ 10 января 2011

Если два приложения совместно используют файловую систему или имеют доступ к общей файловой системе, то вы можете ссылаться на частичное непосредственно по пути к файлу.Из руководства Rails по рендерингу:

2.2.4 Рендеринг произвольного файла

В методе рендеринга также можно использовать представление, полностью выходящее за пределы вашего приложения (возможно, вы делитесь представлениямимежду двумя приложениями Rails):

render "/ u / apps / warehouse_app / current / app / views / products / show"

Rails определяет, что это рендеринг файла из-за начального слешаперсонаж.Чтобы быть явным, вы можете использовать опцию: file (которая требовалась в Rails 2.2 и более ранних версиях):

render: file =>
"/ u / apps / warehouse_app / current / app / views /products / show "

Параметр: file принимает абсолютный путь к файловой системе.Конечно, вам нужно иметь права на представление, которое вы используете для визуализации контента.

0 голосов
/ 10 января 2011

Возможно, было бы более разумно создать гем, в котором есть какой-либо общий код (например, частичные), чтобы оба приложения могли его использовать.

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