2012-12-27 26 views
2

我试图填充某些li标签与此代码:如何在单击链接时使用Rails代码填充div?

<% @events.each do |event| %> 
    <li> 
    <span class="eventname"><%= event.name %></span> 
    <span class="eventlocation"><%= event.location %></span> 
    </li> 
<% end %> 

而且我有一些链接,说:“今天”,“明天”等,当我今天打我希望从今天的事件显示向上。如果我明天击中,我希望明天显示出来。我已经通过AJAX教程和JavaScript教程查找无处不在,我完全迷失了如何在rails中执行此操作。

我认为这样做的一个方法是让这段代码变为部分代码,并对每个部分略微改变一下,以便我想显示的特定事件出现。但是,我仍然坚持着同样的问题,我不确定如何根据链接的点击显示特定的部分。

回答

3

我们将有一个部分是会使一组给定的事件(任何类型),我们称之为_events.html.erb

_events.html.erb:

<% events.each do |event| %> 
    <li> 
    <span class="eventname"><%= event.name %></span> 
    <span class="eventlocation"><%= event.location %></span> 
    </li> 
<% end %> 

然后,我们将创建一个动作名为fetch_events,它返回一个js响应。

Class EventsController < ApplicationController 
    def fetch_events 
    @events = Event.where(type: params[:type]) 
    respond_to do |format| 
     format.js 
    end 
    end 
end 

ofcourse在routes.rb中

match 'fetch_events/:type' => 'events#fetch_events', as: :fetch_events

现在我们建立了fetch_events.js.erb,该文件将设置div的内容ID为 '事件' 的渲染部分。

fetch_events.js.erb:

$('#events').html(<%= escape_javascript(render :events, events: @events) %>) 

现在在你的页面视图中添加具有的div id为 '事件' 将包含响应,而 的AJAX可以使用被称为link_to

<%= link_to 'today', fetch_events_path(type: :today), :remote => true %> 
<%= link_to 'tomorrow', fetch_events_path(type: :tomorrow), :remote => true %> 
+0

我不知道是否这样做,但ERB标签在部分回路内部是错误的。还值得注意的是,一旦选择了过滤器,您将需要触发AJAX请求。但这是钱的答案。 –

+0

我修复了循环的erb标签。谢谢 – Khaled

+0

这似乎正是我要找的!一个快速的问题,但(真的,2):.js.erb文件去了哪里,以及如何触发一个AJAX请求?通过AJAX请求,他的意思是<%= link_to'sometext':method =>:fetch_events%> type deal? – user1810958