Как вызвать метод рельсы из в JQuery - PullRequest
20 голосов
/ 09 мая 2011

У меня есть этот код JQuery:

$("p.exclamation, div#notification_box").live("mouseover", function() {

    });

, и я хочу вызвать этот метод rails из кода jQuery в качестве обратного вызова:

def render_read
  self.user_notifications.where(:read => false).each do |n|
    n.read = true
    n.save
  end
end

Этот метод у моего пользователямодель.Есть ли способ сделать это?

Ответы [ 4 ]

35 голосов
/ 09 мая 2011

Сделайте AJAX-вызов, настройте маршрут, ответьте действием контроллера и вызовите свой метод.

# whatever.js
$("p.exclamation, div#notification_box").on("mouseover", function() {
  $.ajax("/users/render_read")
});

# routes.rb
resources :users do
  get :render_read, on: :collection 
  # or you may prefer to call this route on: :member
end

# users_controller.rb
def render_read
  @current_user.render_read
  # I made this part up, do whatever necessary to find the needed user here
end

PS: этот код предназначен для Rails 3.x и Ruby 1.9.x

3 голосов
/ 09 мая 2011

Хорошо, что у вас есть этот код модели. Нам нужно будет добавить новое действие и убедиться, что ваш маршрут настроен. Если вы используете ресурсы, вам нужно добавить коллекцию или член. Поскольку вы делаете обновление, я бы выбрал PUT в качестве метода http.

Вот пример маршрута:

resources :user_notifications do
  collection do
    put 'render_read'
  end
end

Идите вперед и добавьте действие render_read к своему контроллеру.

Ваш код jQuery будет выглядеть примерно так:

$("p.exclamation, div#notification_box").live("mouseover", function() {   
  $.ajax({
    url: "/user_notifications/render_read",
    type: 'PUT'
  });
});
1 голос
/ 30 мая 2013

Обычно JavaScript работает на стороне клиента, но также возможно, что ваше приложение рисует функцию javaScript для каждого клиента. В этом случае вы можете использовать <%= и теги %> в файле .erb:

<script type="text/javascript">
$(function(){
    new AClass.function({
        text: <%= Date.today %>
    });
});
</script>
1 голос
/ 09 мая 2011

Вам потребуется настроить контроллер на стороне сервера для вызова вашего метода render_read, а затем вы можете использовать $.ajax или $.post в вашем jQuery для сделать запрос.

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