使用link_to:remote - Rails 3的问题

时间:2011-04-14 06:01:37

标签: ruby-on-rails

我正在使用link_to:remote来更新HTML上的div个元素之一。这只是初学者的代码。但是,单击链接时不会进行更新。这是代码:

class SampleController < ApplicationController
     def updater
        render :text => Time.now
     end
end

这是list.html.erb:

<script type = "text/javascript" src = "/javascripts/prototype.js">
<%= link_to "Hello Testing",
    :update => "test_id",
    :url => {:action => 'updater'},
    :remote => true
%>
<div id="test_id"></div>

因此,单击“Hello Testing”链接,浏览器中的URL将更改为: http://localhost:3000/samples?remote=true&update=response_id&url[action]=updater

但是,我尝试设置为当前时间的div元素不会出现在UI上。这可能是什么问题?


使用以下内容更新了帖子:

routes.rb:http://pastebin.com/wmKsa1DD 生成的HTML代码:http://pastebin.com/stU3FpL8 Firebug中的HTML响应:http://pastebin.com/WjsB7zAh

使用url_for不会改变行为。

2 个答案:

答案 0 :(得分:1)

请使用url_for:

<%= link_to "Hello Testing", url_for(:action => :updater),
        :update => "test_id", :remote => true %>

我不是百分百肯定,但我不认为:更新会起作用,因为Rails3现在主要依赖于ujs。

更新div的“rails方式”看起来像(jquery):

$('div#test_id').bind('ajax:complete', function(event, xhr) {
   $(this).html($.parseJSON(xhr.responseText));
})

答案 1 :(得分:0)

1:您还应该包含rails.js文件。普通的Rails就是这样的:

<%= javascript_include_tag :defaults %>

2:我更喜欢将此命名用于网址:updater_samples_path[:updater, :samples]

3:你应该显示你的路线。如果updater方法不使用GET方法,那么您应该定义它:

<%= link_to "Hello Testing", :update => "test_id", updater_samples_path, :method => :put, :remote => true %>

4:使用 FIREBUG 来查看您的AJAX响应。因此您可以轻松调试您的应用程序。您也可以向我们展示其响应,以便我们更好地了解情况