我有这个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
你有这个模型代码是件好事。我们需要添加新操作,并确保您的路线已设置。如果您使用的是资源,则必须添加集合或成员。由于您正在进行更新,因此我会选择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'
});
});
在服务器端设置一个控制器来调用你的render_read
方法,然后你可以在jQuery中使用$.ajax
或$.post
来发出请求。
通常 JavaScript 在客户端工作,但您的应用程序也可能为每个客户端绘制一个 javaScript 函数。在这种情况下,您可以使用 .erb 文件中%>
<%=
和标记:
<script type="text/javascript">
$(function(){
new AClass.function({
text: <%= Date.today %>
});
});
</script>