2013-08-13 9 views
5

Chcę wywołać metodę i uzyskać odpowiedź w mojej aplikacji z innej aplikacji w technologii Ruby on Rails, ale tutaj jest problem z krzyżowym skryptem lokacji. więc mogę rozwiązać ten problem, proszę mi pomóc, byłoby wspaniale.jak wywołać metodę w jednej aplikacji z innej aplikacji w Ruby na szynach

http://video_tok.com/courses/get_course

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

teraz chcę zadzwonić to powyższą metodę z tej aplikacji, która działa w edupdu.com domeny

http://edupdu.com/call_course_method

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

ale byłoby przekierowanie do video_tak Aplikacja .com. Chcę wywołać metodę get_course i pobrać obiekt @course wewnętrznie bez przekierowania do innej witryny.

Z góry dziękuję.

+0

Nie sądzę, że chcesz to zrobić. – sevenseacat

+0

Możesz pobierać kursy przez JSON (P) – Stefan

Odpowiedz

3

AJAX między domenami jest rzeczywiście problemem, ale nie można go rozwiązać. W swojej metodzie get_course można wrócić obiektów kursu jako odpowiedź JSON tak:

render json: @course 

Stamtąd na ciebie może albo odzyskać bieg przez JavaScript (AJAX), tu należy użyć jsonp lub wewnątrz Rails jest wydanie przez Żądanie HTTP GET.

  1. AJAX z jsonp

    Jest JSONP (JSON z wyściółką), która jest techniką komunikacji dla programów JavaScript dostarczenie sposobu do żądania danych z serwera w innej domenie. Spójrz na dokumentację jQuery.getJSON() i przewiń w dół do sekcji JSONP.

    Jeśli adres zawiera ciąg "callback=?" (lub podobnych, jak określono przez strony serwera API), żądanie jest traktowany jako jsonp zamian. Aby uzyskać więcej informacji, zobacz dyskusję na temat typu danych pod numerem $.ajax().

  2. HTTP GET żądanie

    Wystarczy użyć klasy 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) 
    

    Jeśli podasz metody modelu przekształcenia JSON do obiektu domeny Ciebie, możesz zabrać go stamtąd .


RPC

Można również użyć w celu wywołania metod RPC między różnymi procesami Ruby, chociaż polecam tego przynajmniej ja nie chcę go pominąć. Istnieje kilka bibliotek zdalnego wywoływania procedur (RPC).Standardowa biblioteka Ruby zapewnia DRb, ale istnieje również implementacje w oparciu o Ruby on Rails, na przykład rails-xmlrpc klejnot, który pozwala na wdrożenie RPC oparty na protokole XML-RPC lub alternatywnego protokołu używając JSON z json-rpcj

prawdopodobnie okaże jeszcze więcej bibliotek podczas wyszukiwania Railsów RPC. Z dowolnej biblioteki, konkretne rozwiązanie będzie się różnić.

Powiązane problemy