【发布时间】:2011-04-04 01:54:57
【问题描述】:
我有一个包含几位信息的仪表板。这些位之一是用户想要被提醒的事件。这些事件中的每一个都与一个空复选框一起显示。如果用户选中该复选框,则事件记录会更新,并且仪表板应该会在没有最近选中的事件的情况下刷新。
除了最后一部分之外,所有这些都有效。让我感到困惑的是,查看日志会显示在更新事件对象后重定向到仪表板的日志语句与仪表板的原始加载相同。在两种情况下都会根据日志运行查询以查找要在仪表板上显示哪些事件对象。就好像事件对象的实际更新对于后续查询来说不够快,并且后续查询“找到”原始未更新的数据......
代码如下:
查看:
<% @triggered_events.each do |event| %>
<p>
<%= image_tag 'indicator.gif', :id => "indicator-#{event.id}",:style => 'display: none' %>
<span class="grayItalics"><%= truncate(event.title, :length => 25) %></span> --- <% if event.contact_id != nil %>
<%= full_name_by_contact(Contact.find(event.contact_id)) %> <% end %>
<%= l event.start, :format => :yyyyMMdd %> (<%= event.reminder_lead_value %> <%= event.reminder_lead_unit %>)
<%= check_box_tag 'event[recognized_flag]', "1", event.recognized_flag, :onclick => toggle_value(event) %>
<%= link_to 'View Event', event %>
<hr>
</p>
<% end %>
助手:
def toggle_value(object)
remote_function(:url => dashboard_path(:id => object),
:method => :put,
:before => "Element.show('indicator-#{object.id}')",
:complete => "Element.hide('indicator-#{object.id}')" )
end
控制器:
def update
@event = Event.find(params[:id])
@event.recognized_flag=true
respond_to do |format|
if @event.update_attributes(params[:event])
format.html { redirect_to dashboard_path }
format.xml { head :ok }
else
format.html { redirect_to dashboard_path }
format.xml { render :xml => @event.errors, :status => :unprocessable_entity }
end
end
end
编辑:添加路线:
get 'dashboard' => 'dashboard#index'
put 'dashboard' => 'dashboard#update' # added specifically for the Event update mentioned in this question
现在,事件对象的此更新正在仪表板控制器中进行……这可能不是最大的。然而,事件控制器有它自己的“更新”方法正在使用中,并重定向到与仪表板不同的路径,所以这对这个实例不可用......但我认为这不是这个问题的原因。
非常感谢任何帮助。
我还要补充一点,刷新页面 (F5) 表明 Event 对象正在更新(因此在 F5 之后不会显示在仪表板上)。
【问题讨论】:
-
有人在吗? :)
标签: ruby-on-rails-3 redirect refresh