2011-05-17 93 views
8

我有一个非常简单的Post资源,有两个动作,索引和显示。我的模板包含一个带有每个先前帖子链接的侧栏。我想补充工具栏的链接来显示内容(即的“秀”行动结果)通过AJAXRails - 通过ajax显示索引和显示动作的结果

我知道有很多excellenttuts,告诉你如何创建一个使用Ajax提交表单,但这时间我想用它来显示我的索引的内容并显示无页面重新添加的动作

。有没有什么体面的教程给出了如何做到这一点的提示?

我估计我需要创建一个show.js.erb文件,并告诉我的索引操作来响应js,但我有点卡住得到更多。我不太知道要放什么东西在控制器的show动作或show.js.erb - 这是一个有点很难想象什么,我需要做的

PS - 使用Rails 3.0.7,jQuery的1.5

回答

10

得到了这个工作,最后它非常简单。

步骤1 - 添加:remote => true以下链接栏

#application.html.haml 
%nav#sidebar 
    - for post in @posts 
    = link_to post.title, post_path, :remote => true 
%div#main 
    = yield 

步骤2 - 告诉你的控制器到JS回应在节目行动

def show 
    @post = Post.find(params[:id]) 
    @posts=Post.all # needed for sidebar, probably better to use a cell for this 
    respond_to do |format| 
    format.html # show.html.erb 
    format.js # show.js.erb 
    end 
end 

步骤3 - 创建_post.html.haml

# _post.html.haml 
%article.post 
    = sanitize post.body 

步骤4 - 创建show.js.erb和替换与_POST部分内容的#main DIV的HTML(我们在步骤3中创建)

# show.js.erb 
$("#main").html("<%= escape_javascript(render @post) %>"); 

现在,所有内容通过ajax传递,并且工作正常。

+2

有没有一种方法来使用网址来操纵至极@post显示? – oFca 2012-07-23 13:39:10

1

我手边没有完整的答案,因为我对此也比较陌生。

但是,我会先看看JQuery的get()方法。您应该可以使用它来调用索引或show方法。这些方法应该返回您想要在页面的非侧栏部分显示的html。您可以使用get()的回调处理程序将该HTML放入页面上相应的div中。

对不起,这有点含糊,但如果你玩这个我打赌你会弄明白。

+0

这是一个有趣的想法 - 我相当肯定有一个服务器端这个客户端方法的灵感 - 对于搜索引擎优化的目的,也因为我想缓存在服务器上 - 仍然,我会看看这个,看看是什么我可以找到 - 谢谢 – stephenmurdoch 2011-05-18 00:00:04