【发布时间】:2016-03-23 20:27:10
【问题描述】:
我的 RoR 网站使用 fullcalendar gem 实现了一个日历。每个用户都有一个日历,显示他或她正在参加的活动。以下场景为我的问题奠定了基础:
- 用户 Alice 在她的日历上单击了一个事件,这会转到该事件的
show页面。 - Alice 单击事件
show page上的“无人参与事件”按钮 - Alice 单击了返回按钮。
- 她刚刚未参加的活动仍列在她的日历上。
如何让浏览器刷新 Alice 的活动信息,以便在按下返回按钮时只显示她当前正在参加的活动?
我搜索了 Stack Overflow 并没有找到可行的解决方案。如此处How to prevent browser page caching in Rails 所见的缓存清除不起作用。我什至不确定这是一个缓存问题。也许有一些javascript会强制重新加载信息?非常感谢任何解决方案。谢谢!
回应@ElliottRoche:
在视图中点击参加按钮,触发参加动作:
<%= button_to button_text, attend_event_path(@event), :remote => true, :id => "attend" %>
参加操作从参加者列表中添加/删除参加者,如下所示:
def attend
@event = Event.find(params[:id])
@attendee = User.find(session[:user_id])
if @event.users.exclude?(@attendee)
@event.users << @attendee
@event.save
else
@event.users.delete(@attendee)
end
@attendees = @event.users
respond_to do |format|
format.js
format.html { }
format.json { }
end
end
使用attend.js.erb,使用UJS 更新与会者列表:
$('#attendees-list').html("<%= j render(:partial => 'attendees_list', :locals => { :attendees => @attendees }) %>");
从这里开始,当按下后退按钮时,不会反映用户参加/未参加活动的事实。
【问题讨论】:
-
可能是
fullcalendar缓存问题吗?因为如果事件真的是“无人参与”,那么这肯定看起来像一个缓存问题。 -
如果你点击重新加载它会改变吗?我知道如果不使用一些javascript或其他东西,回击不会显示“更新”的日历,但是在点击重新加载按钮后会发生什么(回击后)?
-
我的网站上与完整日历无关的其他区域也遇到过这个问题。基本上,在使用 Javascript 更新页面(如添加与会者)后按下后退按钮时,新显示的页面上的信息不是最新的。我也试过
Rails.cache.clear,但这没有用。也许这是一个turbolinks问题。有什么需要帮助的想法吗? -
@OscarValdezEsquea 当我点击重新加载时页面会更新。
-
是否有 Rails 控制器正在执行更新?如果是这样,它会做任何类型的重定向吗?
标签: javascript jquery ruby-on-rails fullcalendar