Controller #create中的ActiveModel :: MissingAttributeError

时间:2015-08-31 21:00:44

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller

我有一个带有
的rails应用程序 1)用户模型

class User < ActiveRecord::Base
  has_secure_password
  has_many :projects
end

2)项目模型

class Project < ActiveRecord::Base
  belongs_to :user
end

3)db / migrate

中的CreateUser
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :first_name
      t.string :last_name
      t.string :email
      t.string :password_digest
      t.references :projects

      t.timestamps null: false
    end
  end
end

4)db / migrarte中的CreateProject

class CreateProjects < ActiveRecord::Migration
  def change
    create_table :projects do |t|
      t.string :name
      t.string :description
      t.references :users

      t.timestamps null: false
    end
  end
end

现在在我的控制器中,我有一个功能

  def create
    @project = Project.new(project_params)
    @user = User.find(session[:user_id])
    if @project.save
      @user.projects << Project.find(@project.id)
      redirect_to '/'
    else
      redirect_to '/project/create'
    end
  end

但是当我拨打http://localhost:3000/project/new时,我收到以下错误: -
ProjectController中的-NoMethodError #create
- 未定义方法`项目&#39;对于#User

 @user.projects << Project.find(@project.id)

在提取的源中突出显示。
我是否将记录输入has_many关系正确,或者我的语法错误了?

我在服务器的控制台中运行了以下代码,

user = User.find(1)
user.projects 

我收到了以下错误消息:

NoMethodError: undefined method `projects' for #<User:0x00000001f5b508>
    from /home/harshil/.rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/attribute_methods.rb:433:in `method_missing'
    from /home/harshil/.rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/attribute_methods.rb:433:in `method_missing'

由于

1 个答案:

答案 0 :(得分:1)

似乎CreateUser迁移不正确。它不应该参考项目。项目应该引用您已正确完成的用户。

我认为这会让ActiveRecord感到困惑

尝试从t.references :projects迁移中删除UserCreate,然后重试