如何在ruby on rails上的另一个应用程序中调用一个应用程序中的方法

时间:2013-08-13 07:43:19

标签: ruby ruby-on-rails-3

我想调用该方法并在我的应用程序中从Ruby on Rails技术中的另一个应用程序获取响应,但是这里存在跨站点脚本问题。所以,我可以解决这个问题,请帮助我,这将是伟大的。

http://video_tok.com/courses/get_course

def get_course
  @course = Course.find(params[:id])
end

现在我想从这个在edupdu.com域

中运行的应用程序调用上面的方法

http://edupdu.com/call_course_method

def call_course_method
  @course = redirect_to "http://video_tak.com/courses/get_course/1"
end

但它会重定向到video_tak.com应用程序。 我想调用get_course方法并在内部获取@course对象,而无需重定向到另一个站点。

提前致谢。

1 个答案:

答案 0 :(得分:3)

跨域AJAX确实是一个问题,但没有一个无法解决。在get_course方法中,您可以将课程对象作为JSON响应返回,如下所示:

render json: @course

从那里开始,您可以通过JavaScript(AJAX)检索课程,在这里您应该通过发出HTTP GET请求来使用JSONP或Rails内部。

  1. 使用JSONP的AJAX

    有JSONP(带填充的JSON),这是一种JavaScript程序的通信技术,用于提供从不同域中的服务器请求数据的方法。看着 jQuery.getJSON()的文档并向下滚动到JSONP部分。

      

    如果URL包含字符串"callback=?"(或类似的,由...定义)   在服务器端API),请求被视为JSONP。见   有关详细信息,请参阅jsonp$.ajax()数据类型的讨论。

  2. HTTP GET请求

    只需使用Net::HTTP类:

    require 'net/http'
    require 'json'
    
    url = URI.parse('http://video_tak.com/courses/get_course/1')
    req = Net::HTTP::Get.new(url.to_s)
    res = Net::HTTP.start(url.host, url.port) do |http|
      http.request(req)
    end
    course_json = JSON.parse(res.body)
    

    如果您为模型提供了将JSON转换为您的域对象的方法,则可以从那里获取它。


  3. <强> RPC

    您也可以使用RPC来调用不同Ruby进程之间的方法,尽管我建议这一点至少我不想省略它。有几个远程过程调用(RPC)库。 Ruby标准库提供DRb,但也有基于Ruby on Rails的实现,例如rails-xmlrpc gem允许您基于XML-RPC协议或替代协议实现RPC将JSON与json-rpcj

    一起使用

    在搜索 Rails RPC 时,您可能会发现更多的库。从您选择的任何库中,具体的解决方案都会有所不同。