【问题标题】:When do Rails controllers render as JS, HTML, or 'q'?Rails 控制器何时呈现为 JS、HTML 或 'q'?
【发布时间】:2014-01-25 11:31:04
【问题描述】:

我正在尝试调试为什么一段 HTML 代码不能在(其他人的)Rails 代码中正确呈现。

我注意到当我的 .erb 模板被调用时,控制台会输出以下内容:

Started GET "/sub_account/new?_=1389112701545" for 127.0.0.1 at 2014-01-07 18:39:02 +0200
Processing by SubAccountController#new as q=0.5
  Parameters: {"_"=>"1389112701545"}
  Rendered sub_account/new.erb (0.5ms)
Completed 200 OK in 16ms (Views: 4.9ms | ActiveRecord: 1.7ms)

这不返回任何内容。我从“sub_account/new.erb”中删除了所有变量,只是放入了一个“hello world”,但这也没有显示出来。

这就是我的“sub_account”控制器的样子:

#encoding: utf-8
class SubAccountController < Devise::RegistrationsController
  before_filter :authenticate_user!
  layout 'main'
  respond_to :js, :html, :json
  ..

  def new
    build_resource({})
    respond_with self.resource
  end

  def resource
    instance_variable_get(:"@#{resource_name}")
  end

  private
  def build_resource(hash=nil)
    self.resource = resource_class.new_with_session(hash || {}, session)
  end

  def resource_name
    'SubAccount'
  end

  def resource_class
    Classes::SubAccount
  end

查看实际在同一站点上呈现的其他代码,我看到以下内容:

Started GET "/admin/driver/new" for 127.0.0.1 at 2014-01-07 18:38:55 +0200
Processing by Admin::DriverController#new as JS
  Rendered admin/driver/_form_fields.erb (11.9ms)
  Rendered admin/driver/new.erb (79.9ms)
Completed 200 OK in 98ms (Views: 84.2ms | ActiveRecord: 1.9ms)

我注意到它被渲染为JS,在另一个示例中,我看到以下内容:

Started GET "/personal/new" for 127.0.0.1 at 2014-01-07 18:46:28 +0200
Processing by PersonalController#new as HTML
  Rendered shared/_summary_errors.erb (0.2ms)
  Rendered personal/_hidden_fields.erb (1.4ms)
  Rendered personal/_card.erb (9.8ms)
  Rendered personal/_form_fields.erb (28.9ms)
  Rendered devise/shared/_links.erb (0.8ms)
  Rendered personal/new.html.erb within layouts/main (104.3ms)
  Rendered layouts/_head.erb (43.2ms)
  Rendered shared/_logo.erb (1.0ms)
  Rendered shared/_sign_up_header.erb (3.1ms)
  Rendered layouts/_header.erb (4.1ms)
Completed 200 OK in 7442ms (Views: 168.7ms | ActiveRecord: 0.7ms)

所以这被呈现为 HTML。但是,我不知道如何或为什么?我永远不会被渲染的代码被渲染为q=0.5,但我不知道这意味着什么或如何改变它。

更新

这是new.html.erb 的内容(上面的日志说new.erb,但我都在尝试):

<% content_for :scripts do %>
  <script type="text/javascript">
    //<![CDATA[
    window.resource_name = '<%= resource_name %>';
    //]]>
  </script>
  <%= javascript_include_tag  'regex-mask-plugin', :profile_page, 'custom_validators', 'custimize_validator', 'steps' %>
<% end %>

<div class="row" style="margin-top: 30px;">
  <div class="col-md-11">
    <%= form_for(resource, :as => resource_name, :url => sub_account_index_path, :validate => true) do |f| %>
      <div class="row steps">
        <div class="col-md-12">
          <%= render 'form_fields', :f => f, :focus => true %>
        </div>
      </div>

      <!--<div class="col-md-2">
        <div class="row">
          <div class="col-md-8">
            <%= f.submit 'Create', :class => 'btn btn-default btn-block'%>
          </div>
        </div>
      </div>-->
    <% end %>
  </div>
</div>

更新 2:

查看 chrome 的开发工具.. 我注意到单击按钮时发出的请求实际上返回 html 的方式与其他成功渲染的方式相同:

但是,请求头不同..比较下面

正确的接受*/*;q=0.5, text/javascript,..,失败的接受q=0.5, text/javascript....我怎样才能让它也接受*/*

另一个区别是失败的查询字符串参数为_:1389152333528.. 这会有所不同吗?

更新: 我刚刚确认是这个奇怪的查询字符串导致了所有的麻烦。我在没有查询字符串的邮递员上测试了相同的请求。当然我得到了正确的 html:

【问题讨论】:

  • 只是冒险猜测,但您可能需要将 sub_account 文件夹的名称更改为 sub_accounts。一般来说,我在 views 文件夹中看到的东西是复数的。
  • 顺便说一句,我在谷歌上搜索了 'q=0.5' stackoverflow.com/questions/8552927/… 你从哪里请求这个?我的意思是它只是普通的浏览器请求还是页面上的一些 javascript?
  • @TheRusskiy 它只是浏览器上的一个按钮.. &lt;button class="btn btn-primary pull-left" data-target="#newUser" data-toggle="modal" id="addUser" name="button" type="button"&gt;Add new user&lt;/button&gt;
  • 试过复数/单数的东西@TravisPessetto.. 没有运气
  • 你能把 de sub_accounts/new.erb 文件里面的内容贴出来吗?

标签: javascript ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

尝试将视图中的文件从 something.erb 重命名为 something.html.erb 和 something.js.erb。 当你写
respond_to :js, :html, :json
...
respond_with self.resource 控制器首先尝试渲染 something.js.erb 然后是 something.html.erb 等。 如果没有扩展,它不知道要渲染什么视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多