2014-10-07 73 views
1

我創造的Rails 4.1使用Ruby 1.9未定義的方法`error_span」 - 的Rails項目

應用程序最初運行良好工作門戶應用,卻不料一個錯誤彈出。 views目錄中的jobs子目錄包含兩個文件new.html.erb和_form.html.erb(這是部分文件)。在渲染新文件時,部分文件也會從新文件中渲染。

但是,應用程序顯示的RubyMine以下錯誤

錯誤詳細信息: 「NoMethodError在喬布斯#新的」

顯示E:/ RailsProject /老/ FinalSubm/jobportal /應用/視圖/作業/ _form.html.erb其中行#23提出:

未定義的方法`error_span」在行23

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' %> 

跟蹤模板包含的:應用程序/視圖/職位/ new.html.erb

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

應用程序跟蹤|框架跟蹤|全面跟蹤
應用程序/視圖/職位/ _form.html.erb:23:在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' 應用程序/視圖/職位/ new.html.erb:5:`_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 /老/ 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語句的部分文件需要更改。

+0

我不會認爲問題突然出現,沒有任何變化。這意味着你的機器正在開發一個大腦。你是否像以前一樣在同一臺機器上運行它?你有沒有安裝任何新的寶石,運行「包更新」或類似的東西?在哪裏定義了'error_span'方法?此外,您是否有任何形式的源代碼控制來檢查自上次運行以來發生了哪些變化? – BroiSatse 2014-10-07 21:08:52

+0

我使用github作爲VCS,這次我通過運行克隆的存儲庫進行嘗試,但問題仍然存在。但是,我從代碼中刪除了error_span語句,現在代碼運行良好。要回答你的上面的問題,error_span方法是無處定義的,因此它是拋出錯誤。我不知道在哪裏定義error_span方法 – 2014-10-07 21:59:24

回答

6

如果您使用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

+0

是的,我正在使用** twitter-bootstrap-rails **。我修改了gem文件,關閉服務器,運行** bundle update **,然後再次啓動服務器,但仍然存在相同的錯誤「沒有定義方法error_span'」 – 2014-10-08 04:56:22

3

twitter-bootstrap-rails在LIB /發電機/引導/主題/模板/

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

變化

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

.erb & &苗條templete有同樣的錯誤。 here is a fixed version

+1

twitter-bootstrap-rails 3.2.2 has這個bug,如上所述。 – NoelProf 2016-04-26 03:33:35

+0

這給我修好了。 'error_span(@post [:content])'改爲'f.error_span(:content)' – 2016-11-25 02:38:21

1

基於@ NoelProf的回答,我改變了我的Gemfile:

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

這不會安裝的版本3.2.2。

我重新啓動服務器,並且error_span問題已消失。

+0

記得在安裝'twitter-bootstrap-rails' gem後重新啓動服務器。 – 2017-03-09 02:53:01