Rails-刷新或访问多次后,视图变为完全白色



我有一个视图页面,在我访问了几次后,它会随机变成一个空白的白色页面。如果我更改了视图中的某些内容,它会暂时恢复正常,但在几次页面访问后,页面会再次变白。此外,它只发生在Safari中。以下是页面的控制器操作:

class ProjectsController < ApplicationController
    def show_current_projects_to_freelancer
        if current_user.type == 'Student'
            @projects = current_user.projects
            @schedules = current_user.projects.collect {|project| project.schedule}
        else
            redirect_to applicants_path, notice: 'Only Freelancers have access to this page.'
        end
    end
end

有两种模式:时间表和项目。进度表属于_T项目,项目有一个进度表。时间表和项目的路线嵌套如下:

get 'projects/current', to: 'projects#show_current', as: :current_freelancer_projects
resources :projects do
      resources :schedules
end 

我已经改变了好几次看法。无论视图中是否有内容,都会发生这种情况。以下是现在的视图:

<div style="color: black;">
<h3>Current freelancer Projects</h3>
    <table>
        <tr>
            <td>Project Name</td>
            <td>Employer Name</td>
            <td>Date of Bid</td>
            <td>rating</td>
            <td>Bid</td>
            <td>Tags</td>
            <td>Make Schedule</td>
        </tr>
    <% @projects.each do |project| %>
        <tr>
            <td><%= project.title %></td>
            <td><%= project.employer.email %></td>
            <td>date</td>
            <td>rating</td>
            <td>bid</td>
            <td>tags</td>
            <td><%= link_to 'Create Schedule', new_project_schedule_path(project.id, Schedule.new) %></td>
        </tr>
    <% end %>
    </table>
</div>

我无法想象是什么原因造成的。我知道它必须独立于观点,因为无论我如何改变观点,它仍然会发生。有人有什么想法吗?

以下是页面未显示时的日志。当页面出现时,说明它太长了。

Started GET "/current" for 127.0.0.1 at 2013-11-22 17:08:18 -0500
Started GET "/current" for 127.0.0.1 at 2013-11-22 17:08:18 -0500
  ActiveRecord::SchemaMigration Load (0.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
  ActiveRecord::SchemaMigration Load (0.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by ProjectsController#show_current_projects_to_freelancer as HTML
Processing by ProjectsController#show_current_projects_to_freelancer as HTML
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 226 ORDER BY "users"."id" ASC LIMIT 1
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 226 ORDER BY "users"."id" ASC LIMIT 1
  Project Load (3.3ms)  SELECT "projects".* FROM "projects" WHERE "projects"."student_id" = $1  [["student_id", 226]]
  Project Load (3.3ms)  SELECT "projects".* FROM "projects" WHERE "projects"."student_id" = $1  [["student_id", 226]]
  Employer Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 202]]
  Employer Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 202]]
  Employer Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  Employer Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."type" IN ('Employer') AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1  [["id", 201]]
  Rendered projects/show_current_projects_to_freelancer.html.erb within layouts/application (97.3ms)
  Rendered projects/show_current_projects_to_freelancer.html.erb within layouts/application (97.3ms)
   (0.9ms)  SELECT COUNT(*) FROM "relationships" WHERE "relationships"."student_id" = $1 AND "relationships"."state" = 'active'  [["student_id", 226]]
   (0.9ms)  SELECT COUNT(*) FROM "relationships" WHERE "relationships"."student_id" = $1 AND "relationships"."state" = 'active'  [["student_id", 226]]
  Profile Load (1.0ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 ORDER BY "profiles"."id" ASC LIMIT 1  [["user_id", 226]]
  Profile Load (1.0ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 ORDER BY "profiles"."id" ASC LIMIT 1  [["user_id", 226]]
  Rendered layouts/_ssi_header_inner.html.erb (69.1ms)
  Rendered layouts/_ssi_header_inner.html.erb (69.1ms)
  Rendered layouts/_ssi_footer.html.erb (0.3ms)
  Rendered layouts/_ssi_footer.html.erb (0.3ms)
Completed 200 OK in 547ms (Views: 384.9ms | ActiveRecord: 17.2ms)
Completed 200 OK in 547ms (Views: 384.9ms | ActiveRecord: 17.2ms)

问题出在缓存上。通过禁用缓存,我能够解决这个问题。

看起来像是WebKit错误;即使在iOS中,很多人也会遇到这种情况。https://bugs.webkit.org/show_bug.cgi?id=32829

实际上链接的Webkit错误报告是错误的,因为它指的是服务器为无条件请求发送304,所以这实际上是服务器的错误行为,没有Webkit错误。

Safari中出现的错误是,它发送了一个有条件的请求,服务器以304正确响应,然后Safari显示了一个白色页面,可能是由于缓存无效。我怀疑这毕竟是一个Webkit错误,因为没有其他浏览器受到影响,至少到目前为止我所研究的,我只能在Safari中复制它。

我在Apples Bugtracker上安装了雷达(rdar://19074069),但如果有人能用Webkit浏览器重现这一点,那么这很可能是Webkit错误,但我没能做到。

最新更新