我有一个包含几位信息的仪表板。其中一个位是用户想要提醒的事件。每个事件都显示为带有一个空复选框。如果用户选中该复选框,则会更新事件记录,并且在没有最近检查的事件的情况下应刷新仪表板。
除最后一部分外,所有这些都有效。让我感到困惑的是,在更新Event对象之后,查看日志显示了相同的日志记录语句,用于重定向到Dashboard,与原始加载Dashboard一样。根据日志在两种情况下运行查询以查找要在仪表板上显示的事件对象。就好像事件对象的实际更新对于后续查询来说不够快,并且后续查询“找到”原始的未更新数据......
以下是代码:
查看:
<% @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之后不会显示在Dashboard上)。
答案 0 :(得分:0)
你应该
format.html { redirect_to dashboards_path }
或
format.html { redirect_to dashboard_path(@event) }