访问has_many模型记录

时间:2012-01-30 09:14:29

标签: ruby-on-rails associations

我在迁移中定义了以下2个表

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name
      t.string :phone
      t.string :email
      t.string :address
      t.string :resume

      t.timestamps
   end
 end
end

Class CreateResumeSections < ActiveRecordMigration
   def self.up
     create_table :resume_sections do |t|
        t.string :section_name
        t.string :html
        t.timestamps
     end
   end
 end

我有以下2个模型

class User
   has_many :resume_sections, :dependent => :destroy
   attr_accessor :section_layout
   after_save :save_sections

   private
   def save_sections
     self.section_layout = ###Someother logic here that sets this variable
   end

end

class ResumeSection
   belongs_to :user
end

在我的users_controller中,我有以下代码

class UserController < ApplicationController
   def create
      @user = User.new(params[:user])
      @user.save 
      @user.section_layout.each {|key,value|
         rs = ResumeSection.new(:section_name => key, :html => value, :user => @user)
         rs.save
       }
   end
end

在我看来,我有以下代码

 <% @user.resume_sections.each do |section| %>
<%= section.section_name %>
<%= section.html %>
 <% end %>

我在视图中看到Nil:NilClass的Undefined方法错误。表达式@ user.resume_sections没有向我返回我刚创建并保存在UsersController中的记录。相反,它返回零给我。当我检查数据库时,记录就在那里。

@ user.resume_sections表达式是否正确访问这些记录?

由于 保罗

1 个答案:

答案 0 :(得分:3)

在我看来,你错过了迁移中的某些东西。 ResumeSection需要integer字段user_id。只需创建一个包含类似内容的新迁移:

def change
    add_column :resume_section, :user_id, :integer
end