我有一个带有
的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
中的CreateUserclass 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'
由于
答案 0 :(得分:1)
似乎CreateUser
迁移不正确。它不应该参考项目。项目应该引用您已正确完成的用户。
我认为这会让ActiveRecord感到困惑
尝试从t.references :projects
迁移中删除UserCreate
,然后重试