2015-07-14 2 views
1

Мне было интересно, какой лучший способ включить классы ruby ​​в структуру Volt. Я хочу использовать Socket Class, чтобы найти IP-адрес посетителя сайта. Я хочу использовать его в контроллере, но:Использование классов ruby ​​в Volt Framework

require 'socket' 

В верхней части файла не работает. Какие-либо предложения?

+0

Вы пытаетесь запустить это на стороне сервера, правильно? – GDP2

+0

Нет. Я пытаюсь запустить его на стороне клиента. – user3579220

ответ

3

Ну, я не думаю, что вы можете использовать класс Socket на стороне клиента, так как вольт использует OpalRb для запуска Ruby на клиенте, и, к сожалению, я не думаю, что Opal может поддерживать класс Socket, поскольку это своего рода трудно сделать в браузере. Однако вы можете запустить код на стороне сервера и передать свои желаемые результаты клиенту. Вы можете сделать это, используя Volt's tasks. Вы можете создать их так:

require 'socket' 

class SocketTask < Volt::Task 
    def use_sockets 
    # do your thing with sockets here... 
    end 
end 

, а затем вы можете использовать их в другом месте, например, в контроллере, как это:

class Controller < Volt::ModelController 
    def some_action 
    SocketTask.use_sockets 

    # You can also use the #then method of the returned promise to get the result of the call. 
    # You can even use the #fail method on the promise to get any thrown errors. 
    # The following can also run code on the client. 

    SocketTask.use_sockets.then do |result| 
     alert result 
    end.fail do |error| 
     puts error 
    end 
    end 
end 

Там также хороший скринкаст Рик Карлино о Volt задач here.

+0

Это прекрасно работает. Большое спасибо! – user3579220

+0

@ user3579220 Рад помочь :) – GDP2