【问题标题】:Is it possible to render partials from a Ruby on Rails application to another?是否可以将 Ruby on Rails 应用程序的部分渲染到另一个应用程序?
【发布时间】:2011-01-10 15:57:36
【问题描述】:

我有两个 RoR3 应用程序(APP1APP2

  • 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 代码。除其他事项外,我不知道是否有其他技术可以更轻松地完成我想做的事情。

那么,是否可以使用在同一个 RoR 应用程序中渲染部分的通用且简单的方法来渲染从 APP1APP2 的部分?

例子:

render :partial => "/users/new"

如果是这样,我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby rendering partial-views


    【解决方案1】:

    在这里,试试这个:

    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,您将受到跨站点脚本异常的影响。

    【讨论】:

      【解决方案2】:

      如果两个应用程序共享一个文件系统或可以访问一个共享文件系统,那么您可以通过文件路径直接引用一个部分。来自 Rails 渲染指南:

      2.2.4 渲染任意文件

      render 方法也可以使用视图 这完全不在你的范围内 应用程序(也许你正在共享 两个 Rails 应用程序之间的视图):

      渲染 "/u/apps/warehouse_app/current/app/views/products/show"

      Rails 确定这是一个文件 由于前导斜线而呈现 特点。明确地说,您可以使用 :file 选项(这是必需的 在 Rails 2.2 及更早版本上):

      渲染:文件 =>
      "/u/apps/warehouse_app/current/app/views/products/show"

      :file 选项采用绝对值 文件系统路径。当然,你需要 有权看到你是 用于渲染内容。

      【讨论】:

        【解决方案3】:

        创建一个包含任何共享代码(即部分代码)的 gem 可能更谨慎,这样两个应用程序都可以使用它。

        【讨论】:

        • “gem”是一组打包的 ruby​​ 对象,可以轻松地包含在多个项目中。 Rails 等价物是一个插件,在这里可能更合适。