Ruby on rails 未知属性';电子邮件';在尝试创建时为[有许多关联]
我有一个模型Ruby on rails 未知属性';电子邮件';在尝试创建时为[有许多关联],ruby-on-rails,activerecord,rspec,associations,Ruby On Rails,Activerecord,Rspec,Associations,我有一个模型用户,我已经建立了一个模型,它有许多/属于与帖子的关联,我正试图在rspec中测试我的帖子控制器。但是,当我尝试创建属于某个用户的帖子时,会出现错误:未定义的方法'email='for# 我是这样写的: before(:each) do @user = User.create!({email: "email@gmail.com", password: "password"}) @post = @user.posts.create!({title: "t
用户
,我已经建立了一个模型,它有许多/属于与帖子的关联
,我正试图在rspec中测试我的帖子控制器。但是,当我尝试创建属于某个用户的帖子时,会出现错误:未定义的方法'email='for#
我是这样写的:
before(:each) do
@user = User.create!({email: "email@gmail.com", password: "password"})
@post = @user.posts.create!({title: "title", content: "content"})
end
我不知道它为什么要为帖子找到电子邮件方法,因为根本没有。
当我试图在rails控制台中创建一个新帖子时,我也会遇到这个错误。我可以执行p=Post.new(…)
,但在保存时会出现错误。(p.save!
)
当我尝试创建一篇类似这样的帖子时,我也会遇到错误:
before(:each) do
@user = User.create!({email: "email@gmail.com", password: "password"})
@post = @user.posts.create!({title: "title", content: "content"})
end
Post.create({title:“title”,content:“content”,user\u id:1})
有人知道为什么会出现此错误,以及我如何修复它吗?谢谢
--
我的帖子模型如下所示:
class Post < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
belongs_to :user
end
class Post
根据给定的信息,以下是文件的外观:
型号/用户.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
end
class用户
型号/post.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
end
class Post
用户迁移
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet :current_sign_in_ip
t.inet :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email
t.timestamps null: false
end
add_index :users, :name
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token, unique: true
add_index :users, :unlock_token, unique: true
end
end
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :notes do |t|
t.string :title, null: false
t.text :content, null: false
t.timestamps null: false
end
end
end
class DevisionCreateUsers
迁移后
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet :current_sign_in_ip
t.inet :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email
t.timestamps null: false
end
add_index :users, :name
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token, unique: true
add_index :users, :unlock_token, unique: true
end
end
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :notes do |t|
t.string :title, null: false
t.text :content, null: false
t.timestamps null: false
end
end
end
class CreatePosts
根据给定的信息,以下是文件的外观:
型号/用户.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
end
class用户
型号/post.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
end
class Post
用户迁移
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet :current_sign_in_ip
t.inet :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email
t.timestamps null: false
end
add_index :users, :name
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token, unique: true
add_index :users, :unlock_token, unique: true
end
end
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :notes do |t|
t.string :title, null: false
t.text :content, null: false
t.timestamps null: false
end
end
end
class DevisionCreateUsers
迁移后
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet :current_sign_in_ip
t.inet :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email
t.timestamps null: false
end
add_index :users, :name
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token, unique: true
add_index :users, :unlock_token, unique: true
end
end
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :notes do |t|
t.string :title, null: false
t.text :content, null: false
t.timestamps null: false
end
end
end
class CreatePosts
模型中的Post
中的这一行导致了问题<默认情况下,code>design
需要一个电子邮件列,这就是它抱怨它不存在的原因。只需从Post
模型中删除该行即可
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
Post
模型中的这一行导致了问题<默认情况下,code>design
需要一个电子邮件列,这就是它抱怨它不存在的原因。只需从Post
模型中删除该行即可
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
你的Post
模型是什么样子的?@iceman我在问题中添加了这个。好的,默认情况下designe需要一个电子邮件栏。另外,designe通常位于你的用户模型中,而不是Post
模型中。哇,就是这样,谢谢。我把设计线放在那里,因为我认为这可能是协会的结果。如果你想加上它作为答案,我会把你的标记为正确。非常感谢。你的Post
模型是什么样子的?@iceman我在问题中添加了这个。好的,默认情况下,designe需要一个电子邮件栏。另外,designe通常在你的User
模型中,而不是Post
模型中。哇,就是这样,谢谢