【问题标题】:Undefined method `error_span' - Rails Project未定义的方法“error_span” - Rails 项目
【发布时间】:2014-12-02 10:10:40
【问题描述】:

我正在使用 Ruby 1.9 在 Rails 4.1 中创建一个工作门户应用程序

应用程序最初运行良好,但意外弹出错误。 views 目录下的 jobs 子目录包含两个文件 new.html.erb 和 _form.html.erb(这是一个部分文件)。在渲染新文件时,部分文件也会从新文件中渲染出来。

但是,应用程序在 Rubymine 中显示以下错误

错误详情: “作业中的 NoMethodError#new”

显示 E:/RailsProject/Old/FinalSubm/jobportal/app/views/jobs/_form.html.erb 其中第 23 行提出:

第 23 行未定义方法 `error_span'

   20    <div class="controls">
   21      <%= f.text_field :title, :class => 'form-control' %>
   22    </div>
   23    <%= error_span(@job[:title]) %>
   24  </div>
   25  <div class="control-group">
   26    <%= f.label :description, :class => 'control-label' %>

模板包含的痕迹:app/views/jobs/new.html.erb

Rails.root: E:/RailsProject/Old/FinalSubm/jobportal

应用程序跟踪 |框架跟踪 |完整跟踪
app/views/jobs/_form.html.erb:23:in block in _app_views_jobs__form_html_erb__604570268_42022236'
app/views/jobs/_form.html.erb:1:in
_app_views_jobs__form_html_erb__604570268_42022236' app/views/jobs/new.html.erb:5:in `_app_views_jobs_new_html_erb___144564004_42034104'

以下是为 E:/RailsProject/Old/FinalSubm/jobportal/app/views/jobs/_form.html.erb 编写的代码

<%= form_for @job, :html => { :class => "form-horizontal job" } do |f| %>

    <% if @job.errors.any? %>
    <div id="error_expl" class="panel panel-danger">
      <div class="panel-heading">
        <h3 class="panel-title"><%= pluralize(@job.errors.count, "error") %> prohibited this job from being saved:</h3>
      </div>
      <div class="panel-body">
        <ul>
        <% @job.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    </div>
  <% end %>

  <div class="control-group">
    <%= f.label :title, :class => 'control-label' %>
    <div class="controls">
      <%= f.text_field :title, :class => 'form-control' %>
    </div>
    <%= error_span(@job[:title]) %>
  </div>
  <div class="control-group">
    <%= f.label :description, :class => 'control-label' %>
    <div class="controls">
      <%= f.text_area :description, :class => 'form-control' %>
    </div>
    <%= error_span(@job[:description]) %>
  </div>
  <div class="control-group">
    <%= f.label :tag1, :class => 'control-label' %>
    <div class="controls">
      <%=  f.select :tag1, options_for_select(%w[Internship Full-Time Part-Time Co-Op Contractor]) %>
    </div>
    <%= error_span(@job[:tag1]) %>
  </div>
  <div class="control-group">
    <%= f.label :tag2, :class => 'control-label' %>
    <div class="controls">
      <%= f.select :tag2, options_for_select(%w[Work-From-Home Office]) %>
    </div>
    <%= error_span(@job[:tag2]) %>
  </div>
  <div class="control-group">
    <%= f.label :tag3, :class => 'control-label' %>
    <div class="controls">
      <%= f.select :tag3, options_for_select(%w[US-Citizen Non-US-Citizen]) %>
    </div>
    <%= error_span(@job[:tag3]) %>
  </div>
  <div class="control-group">
    <%= f.label :category, :class => 'control-label' %>
    <div class="controls">
      <%= f.select :category_name, Category.all.collect{ |c| [c.name, c.id]} %>
    </div>
    <%= error_span(@job[:category_name]) %>
  </div>
  <div class="control-group">
    <%= f.label :deadline, :class => 'control-label' %>
    <div class="controls">
      <%= f.date_select :deadline, :class => 'form-control' %>
    </div>
    <%= error_span(@job[:deadline]) %>
  </div>
 <!-- <div class="control-group">
    <%= f.label :employer_id, :class => 'control-label' %>
    <div class="controls">
      <%= f.number_field :employer_id, :class => 'form-control' %>
    </div>
    <%= error_span(@job[:employer_id]) %>
  </div>
   <%= f.hidden_field :employer_id  %>
  <%= f.submit nil, :class => 'btn btn-primary' %>
  <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
            jobs_path, :class => 'btn btn-default' %>

<% end %>

以下是为 E:/RailsProject/Old/FinalSubm/jobportal/app/views/jobs/new.html.erb 编写的代码

<%- model_class = Job -%>
<div class="page-header">
  <h1><%=t '.title', :default => [:'helpers.titles.new', 'New %{model}'], :model => model_class.model_name.human.titleize %></h1>
</div>
<%= render :partial => 'form' %>

该程序几天前运行良好,此后除了重新启动 Rails 服务器外,没有对代码进行任何更改。我试图弄清楚这个错误是从哪里弹出的。为了解决这个错误,我应该在 Jobs#new controller 中定义方法 error_span 吗?里面应该写什么?或者我是否应该从视图中删除 error_span 语句,但这意味着必须在代码中进行许多更改,因为我还有 8 到 10 个文件,其中提到 html 语句的部分文件需要更改。

【问题讨论】:

  • 我不会相信问题突然出现并且什么都没有改变。这意味着你的机器正在开发大脑。您是否在与以前相同的机器上运行它?您是否安装了任何新的 gem,运行 bundle update 或类似的东西? error_span 方法在哪里定义?另外,您是否有任何形式的源代码控制来检查自上次运行以来发生了什么变化?
  • 我使用的是github作为VCS,这次我尝试运行克隆的存储库,问题仍然存在。但是,我从代码中删除了 error_span 语句,现在代码运行良好。要回答您的上述问题,error_span 方法未在任何地方定义,因此会引发错误。我不知道在哪里定义 error_span 方法

标签: html ruby-on-rails ruby ruby-on-rails-4 runtime-error


【解决方案1】:

如果您使用的是twitter-bootstrap-rails(我猜这是error_span 方法的来源)。

通过输入您的Gemfile 尝试使用最新代码:

gem 'twitter-bootstrap-rails', :git => 'https://github.com/seyhunak/twitter-bootstrap-rails.git', :branch => 'master'

因为看起来他们几周前修复了这个方法。

更多信息:https://github.com/seyhunak/twitter-bootstrap-rails/pull/795

【讨论】:

  • 是的,我正在使用 twitter-bootstrap-rails。我已修改 gem 文件,关闭服务器,运行 bundle update ,然后再次启动服务器,但仍然存在相同的错误 "No method defined 'error_span'"
【解决方案2】:

twitter-bootstrap-rails在 lib/generators/bootstrap/themed/templates/ 中有一个错误

 <%%= error_span(@<%= resource_name %>[:<%= column.name %>]) %>

改成

  <%%= f.error_span(:<%= column.name %>) %>

.erb && slim Templete 有同样的错误。 here is a fixed version

【讨论】:

  • twitter-bootstrap-rails 3.2.2 有这个错误,如上所述。
  • 这为我解决了问题。 error_span(@post[:content])改为f.error_span(:content)
【解决方案3】:

根据@NoelProf 的回答,我更改了我的 Gemfile:

gem 'twitter-bootstrap-rails', '>= 3.2.0', '< 3.2.2'

这不会安装版本 3.2.2。

我重启了服务器,error_span问题已经消失了。

【讨论】:

  • 安装twitter-bootstrap-rails gem后记得重启服务器。
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 2016-02-22
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多