web-dev-qa-db-ja.com

jQueryでRailsメソッドを呼び出す方法

私はこのJQueryコードを持っています:

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

    });

そして、これをコールバックとしてjQueryコード内からRailsメソッドを呼び出したい:

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

このメソッドは私のユーザーモデルにあります。これを行う方法はありますか?

21
user730569

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

36
edgerunner

そのモデルコードがあるのは良いことです。新しいアクションを追加し、ルートが設定されていることを確認する必要があります。リソースを使用している場合は、コレクションまたはメンバーを追加する必要があります。更新を行っているので、httpメソッドとしてPUTを選択します。

ルートの例を次に示します。

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'
  });
});
4
Andy Gaskell

render_readメソッドを呼び出すには、サーバー側にコントローラーを設定する必要があります。その後、 $.ajax または $.post を使用できます。 =リクエストを行うためにjQueryで。

1
mu is too short

通常、JavaScriptはクライアント側で機能しますが、アプリケーションがクライアントごとにjavaScript関数を描画することも可能です。その場合、.erbファイルで<%=とタグ%>を使用できます。

<script type="text/javascript">
$(function(){
    new AClass.function({
        text: <%= Date.today %>
    });
});
</script>
1