2012-03-02 123 views
4

我目前有一个显示micropost列表的页面,该页面还包含多个选项卡,如Most RecentMost DiscussedMost Viewed。我想知道什么是最好的方式来呈现micropost的不同类型的列表顺序,而无需刷新整个页面并通过ajax。我不确定如何去做这件事,但我愿意了解是否有人借我帮忙。谢谢 :)。到目前为止,我有这么多。Rails:通过带按钮的Ajax渲染部分内容

页面HTML

<div id='ContentHeader'> 
<%= render 'microposts/new' %> 
<div class='StreamTabContainer'> 
<ul class='StreamTabs'> 
<li class='StreamTab StreamTabRecent active'> 
<%= link_to 'Most Recent', some_path, :remote => true, :class => 'TabText' %> 
</li> 
<li class='StreamTab StreamTabDiscussed'> 
<%= link_to 'Most Discussed', some_path, :remote => true, :class => 'TabText' %> 
</li> 
<li class='StreamTab StreamTabViews '> 
<%= link_to 'Most Views', some_path, :remote => true, :class => 'TabText' %> 
</li> 
<li class='StreamTab StreamTabRated'> 
<%= link_to 'Highest Rated', some_path, :remote => true, :class => 'TabText' %> 
</li> 
</ul> 
</div> 
</div> 


<div id='ContentBody'> 
<div id='ajax'></div> 
<%= render 'users/microposts', :microposts => @microposts %> 
</div> 

回答

5

看起来你是在正确的道路上。快速浏览您的视图似乎是正确的。

有短短最终件为使这项工作,首先确保你的控制器可以接受JS调用:

# Inside Controller's action 
respond_to do |format| 
    format.js 
end 

一旦你已经设定了,你需要创建的javascript返回每次通话的客户端。在视图文件夹

# app/views/controllerName/actionName.js.erb 
$('#ajax').html("<%= escape_javascript(render(:partial => 'content', :sortingType => 'type')) %>"); 

以上将允许您呈现部分中创建的文件,显示的帖子(在这个例子中我已经把它命名为内容),并通过在sortingType到局部一个局部变量。该响应将放置在div id =“ajax”的html中(从您的示例中)。最后一步是创建视图的部分,这将使得所有帖子的排序方式,你想

# app/views/resourceName/_content.html.erb 
# Simply create your view partial here, which uses the :sortingType to display your posts in the order you need 

希望这将让你更接近你的内涵。

编辑:实现我有一些问题与我的报价。

+0

我应该把什么作为我的链接内的标签链接? – Kellogs 2012-03-03 00:10:46

+0

有什么我应该添加到路线文件以及? – Kellogs 2012-03-03 00:19:55

+0

如果您已经能够路由到此控件,则不需要额外的路由工作。 link_to可以通过一些参数检查来调用当前动作,或者您可以通过该新动作创建新动作和link_to。 – coderates 2012-03-04 00:27:14