redirect_to不是Rails 3中的刷新页面

时间:2011-04-04 01:54:57

标签: ruby-on-rails-3 redirect refresh

我有一个包含几位信息的仪表板。其中一个位是用户想要提醒的事件。每个事件都显示为带有一个空复选框。如果用户选中该复选框,则会更新事件记录,并且在没有最近检查的事件的情况下应刷新仪表板。

除最后一部分外,所有这些都有效。让我感到困惑的是,在更新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上)。

1 个答案:

答案 0 :(得分:0)

你应该

format.html { redirect_to dashboards_path }

format.html { redirect_to dashboard_path(@event) }