2011-04-04 47 views
0

我有一个包含几位信息的仪表板。其中一个位是用户想要提醒的事件。这些事件中的每一个都沿着空的复选框显示。如果用户选中该复选框,则会更新事件记录,并且无需最近检查的事件即可刷新仪表板。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之后不会显示在仪表板上)。

+0

没有其他的想法了吗? – daz13 2011-04-11 17:13:07

+0

是否有人在那里? :) – daz13 2011-04-22 06:09:58

回答

0

你应该有

format.html { redirect_to dashboards_path } 

format.html { redirect_to dashboard_path(@event) } 
+0

非常感谢您的答案,但是仪表板模型仅由'索引'组成 - 它不是包含显示,编辑,新建,删除等的标准'资源'模型...我编辑了原文发布以包含可用的路线。所以'dashboards_path'没有办法。此外,仪表板还包含其他几个信息 - 它不是特定于事件的,因此在这种情况下,“dashboard_path(@event)”不会向重定向添加任何内容 – daz13 2011-04-04 02:37:20