Ruby on rails 3.0 NoMethodError

时间:2012-05-21 09:46:28

标签: ruby-on-rails ruby-on-rails-3.1

我的应用中有错误。我有一个嵌套的,它在新的,但不在我希望看到所有用户的内容的页面中完美呈现。 这是错误:

NoMethodError in Resumes#index

Showing /Users/antonella/Desktop/resumin/resume/app/views/resumes/index.html.erb where line #10 raised:

undefined method `educations' for nil:NilClass

Extracted source (around line #10):

7:          <%= resume.personal_detail.address %>
8:          <%= resume.personal_detail.telephone %>
9:      </li>
10:         <% @resume.educations.each do |education| %>
11:         <li>
12:             <%= resume.education.school_name %>
13:             <%= resume.education.city %>

Rails.root: /Users/antonella/Desktop/resumin/resume

resume.rb

class Resume < ActiveRecord::Base
    has_one :personal_detail
    has_many :educations, :dependent => :destroy
    accepts_nested_attributes_for :personal_detail
    attr_accessible :personal_detail_attributes 
    validates_associated :personal_detail 

    accepts_nested_attributes_for :educations, :reject_if => lambda { |a| a[:education].blank? }, :allow_destroy => true
    attr_accessible :education_attributes
    validates_associated :education
end

resumes_controller.rb

def index 
    @resumes = Resume.all
  end

education.rb

class Education &lsaquo; ActiveRecord::Base
    belongs_to :resume
    attr_accessible :school_name, :degree, :dates_attended, :type_of_study, :field_of_study, :city, :country
end

的index.html

<h1>All resumes</h1>
<ul>
    <% @resumes.each do |resume| %>
        <li>
            <%= resume.personal_detail.firstname %>
            <%= resume.personal_detail.lastname %>
            <%= resume.personal_detail.address %>
            <%= resume.personal_detail.telephone %>
        </li>
        <% @resume.educations.each do |education| %>
        <li>
            <%= resume.education.school_name %>
            <%= resume.education.city %>
            <%= resume.education.country %>
            <%= resume.education.dates_attended %>
            <%= resume.education.degree %>
            <%= resume.education.type_of_study %>
            <%= resume.education.field_of_study %>
        </li>
        <% end %>
    <% end %>
</ul>

1 个答案:

答案 0 :(得分:0)

而不是:

<% @resume.educations.each do |education| %>

它应该是:

<% resume.educations.each do |education| %>

请注意,变量@resume不存在。您只有@resumes并且在循环内部有resume

您还必须更改此部分:

<li>
  <%= resume.education.school_name %>
  <%= resume.education.city %>
  <%= resume.education.country %>
  <%= resume.education.dates_attended %>
  <%= resume.education.degree %>
  <%= resume.education.type_of_study %>
  <%= resume.education.field_of_study %>
</li>

要:

<li>
  <%= education.school_name %>
  <%= education.city %>
  <%= education.country %>
  <%= education.dates_attended %>
  <%= education.degree %>
  <%= education.type_of_study %>
  <%= education.field_of_study %>
</li>