【发布时间】: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 它只是浏览器上的一个按钮..
<button class="btn btn-primary pull-left" data-target="#newUser" data-toggle="modal" id="addUser" name="button" type="button">Add new user</button> -
试过复数/单数的东西@TravisPessetto.. 没有运气
-
你能把 de sub_accounts/new.erb 文件里面的内容贴出来吗?
标签: javascript ruby-on-rails ruby ruby-on-rails-3