我有一个包含几位信息的仪表板。其中一个位是用户想要提醒的事件。这些事件中的每一个都沿着空的复选框显示。如果用户选中该复选框,则会更新事件记录,并且无需最近检查的事件即可刷新仪表板。redirect_to不是在Rails 3中刷新页面
所有这些工作除了最后一部分。让我感到困惑的是,对于原始加载的仪表板,更新Event对象后,查看日志显示了与重定向到仪表板相同的日志语句。根据日志查找在仪表板上查找哪些Event对象的查询。这是因为如果该事件对象的实际更新不用于后续查询产生足够快,并且随后查询“发现”原来的未更新的数据...
下面的代码:
查看:
<% @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
现在,事件对象上安装此更新在仪表板控制器存在的......这可能不是最大的。然而,事件控制器使用它自己的'Update'方法并重定向到不同于仪表板的路径,所以这个对于这个实例是不可用的......但我不认为这是造成这个问题的原因。
任何帮助,非常感谢。
我还补充说,刷新页面(F5)显示Event对象正在更新(因此在F5之后不会显示在仪表板上)。
没有其他的想法了吗? – daz13 2011-04-11 17:13:07
是否有人在那里? :) – daz13 2011-04-22 06:09:58