我有一个模型User
,我已经与has_many
建立了belongs_to
/ posts
关联,我试图测试我的在rspec中发布控制器。但是,当我尝试创建属于用户的帖子时,我收到错误:undefined method 'email=' for #<Post:0x00000...>
我正在创建帖子:
before(:each) do
@user = User.create!({email: "email@gmail.com", password: "password"})
@post = @user.posts.create!({title: "title", content: "content"})
end
我不确定为什么要为帖子找到email
方法,因为没有这种方法存在。
当我尝试在rails控制台中创建新帖子时,我也收到此错误。我可以p = Post.new(...)
,但是我保存时会收到错误。 (p.save!
)
当我尝试创建这样的帖子时,我也收到错误:
Post.create({title: "title", content: "content", user_id: 1 })
有谁知道为什么会出现此错误以及如何解决此错误?谢谢!
-
我的帖子模型如下:
class Post < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
belongs_to :user
end
答案 0 :(得分:1)
根据给定的信息,这是文件的外观:
<强>模型/ user.rb 强>
HtmlImage
<强>模型/ 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 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
答案 1 :(得分:1)
Post
模型中的这一行导致了问题。默认情况下,devise
需要一个电子邮件列,这就是为什么它抱怨它不存在的原因。只需从Post
模型中删除该行。
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable