【问题标题】:redirect_to isn't refreshing page in Rails 3在 Rails 3 中,redirect_to 没有刷新页面
【发布时间】: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


【解决方案1】:

你应该有

format.html { redirect_to dashboards_path }

format.html { redirect_to dashboard_path(@event) }

【讨论】:

  • 非常感谢您的回答,但是仪表板模型仅由“索引”组成 - 它不是包含显示、编辑、新建、删除等的标准“资源”模型...我'已经编辑了原始帖子以包括可用的路线。所以 'dashboards_path' 不能解决问题。同样,仪表板还包含其他一些信息——它不是特定于事件的,因此在这种情况下,“dashboard_path(@event)”不会向重定向添加任何内容
猜你喜欢
  • 1970-01-01
  • 2011-07-03
  • 2013-11-30
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多