私はこの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
このメソッドは私のユーザーモデルにあります。これを行う方法はありますか?
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
そのモデルコードがあるのは良いことです。新しいアクションを追加し、ルートが設定されていることを確認する必要があります。リソースを使用している場合は、コレクションまたはメンバーを追加する必要があります。更新を行っているので、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'
});
});
通常、JavaScriptはクライアント側で機能しますが、アプリケーションがクライアントごとにjavaScript関数を描画することも可能です。その場合、.erbファイルで<%=
とタグ%>
を使用できます。
<script type="text/javascript">
$(function(){
new AClass.function({
text: <%= Date.today %>
});
});
</script>