2011-05-09 36 views
18

調用軌道方法我有這樣的jQuery代碼:如何從jQuery中

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

此:

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

    }); 

,我希望把這種從jQuery代碼作爲回調中軌方法方法在我的用戶模型中。有沒有辦法做到這一點?

回答

33

進行AJAX調用,設置路由,以控制器操作響應並調用您的方法。

# whatever.js 
$("p.exclamation, div#notification_box").on("mouseover", function() { 
    $.ajax("https://stackoverflow.com/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和紅寶石1.9.x的

+1

冷靜,我會很感激jQuery的示例代碼...謝謝! – user730569 2011-05-09 06:33:39

+1

你走了,比我想象的要簡單。 – edgerunner 2011-05-09 06:38:11

1

您將需要建立一個控制器上的服務器端調用您的render_read方法,然後你可以使用$.ajax$.post在您的jQuery中發出請求。

3

這是很好,你有該型號的代碼。我們需要添加一個新的動作並確保您的路線已設置。如果您正在使用資源,則必須添加收藏或成員。由於您正在更新,我會選擇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

通常JavaScript的工作在客戶端,但它也可能是您的應用程序繪製一個JavaScript函數爲每個客戶端。在這種情況下,你可以在.erb文件中使用<%=和標籤%>

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