如何在单击链接时使用Rails代码填充div?

时间:2012-12-27 22:21:47

标签: html ruby-on-rails

我正在尝试使用以下代码填充一些li代码:

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

我有一些链接说“今天”,“明天”等,当我今天点击时,我希望今天的事件能够出现。如果我明天打,我希望明天出现。我通过AJAX教程和javascript教程到处查看,我完全迷失了如何在rails中执行此操作。

我考虑过的一种方法是让这段代码成为局部代码,然后对每个部分代码稍作修改,以便我想要显示的特定事件出现。但后来我仍然遇到同样的问题,我不知道如何根据链接的点击显示特定的部分。

1 个答案:

答案 0 :(得分: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
在routes.rb

中的

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

现在我们构建fetch_events.js.erb,此文件会将id为'events'的div的内容设置为呈现的部分。

<强> fetch_events.js.erb:

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

现在在您的页面视图中添加一个包含id'events'的div,其中包含响应 可以使用link_to

调用ajax
<%= link_to 'today', fetch_events_path(type: :today),  :remote => true %>
<%= link_to 'tomorrow', fetch_events_path(type: :tomorrow),  :remote => true %>