无法在rails控制台中创建对象 - 模型关联

时间:2016-12-04 17:59:25

标签: ruby-on-rails activerecord model-view-controller associations models

我是RoR的新手,我正在练习模特和协会。

我用belongs_to关联创建了两个模型。当我尝试通过Rails控制台创建其中一个模型的对象时,我得到一个回滚事务,我不知道为什么。所有帮助将不胜感激!

我已成功创建用户:

=> #<User id: 1, name: "Jen", created_at: "2016-12-04 17:48:33", updated_at: "2016-12-04 17:48:33"> 

当我尝试创建一个Post对象时,我得到了这个:

2.3.0 :012 > post = Post.create(body: "hola soy un post nuevo")
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
 => #<Post id: nil, user_id: nil, body: "hola soy un post nuevo", created_at: nil, updated_at: nil> 

models / user.rb&gt;

class User < ApplicationRecord
  has_many :posts
end

models / post.rb&gt;

class Post < ApplicationRecord
  belongs_to :user
end

db / schema.rb&gt;

ActiveRecord::Schema.define(version: 20161204174201) do

  create_table "posts", force: :cascade do |t|
    t.integer  "user_id"
    t.text     "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_posts_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

2 个答案:

答案 0 :(得分:5)

Rails 5 中,在user_id创建帖子时为posts belongs_to user设置在线状态验证。

您可以从config/initializers/new_framework_defaults.rb

禁用此行为
#Require `belongs_to` associations by default. Previous versions had false.
Rails.application.config.active_record.belongs_to_required_by_default = true

您也可以使用关联中的optional: true选项停用此行为:

class Post < ApplicationRecord
  belongs_to :user, optional: true
end

答案 1 :(得分:3)

您可以轻松查看回滚背后的原因,按照以下步骤操作,您可以在errors对象上调用post方法。这样做

post = Post.create(body: "hola soy un post nuevo")
post.errors.full_messages

post.errors.full_messages将返回包含回滚错误的数组。粘贴你在这里得到的错误,我们会帮助你。

希望有所帮助!