Rails has_many索引列不能为空

Cod*_*ang 1 ruby-on-rails has-many

我正在创建一个消息模型,关联是

User has_many messages
Message belongs_to user
Run Code Online (Sandbox Code Playgroud)

有两种消息,一种是公开消息,另一种是私有消息。它取决于其is_public列。

这是我的消息架构

create_table "messages", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
  t.string   "title"
  t.text     "content",    limit: 65535
  t.boolean  "is_public"
  t.integer  "user_id"
  t.datetime "created_at",               null: false
  t.datetime "updated_at",               null: false
  t.index ["user_id"], name: "index_messages_on_user_id", using: :btree
end
Run Code Online (Sandbox Code Playgroud)

我认为只有私人讯息应该包含user_id

但是,我发现我无法message直接创建。

例如

m = Message.create
=> #<Message:0x007fa6724e9d80 id: nil, title: nil, content: nil, is_public: nil, user_id: nil, created_at: nil, updated_at: nil>
Message.count 
=> 0
User.first.messages << m
Message.count
=> 1
Run Code Online (Sandbox Code Playgroud)

有没有一种更好的方式可以保留index和创建message而不进行关联?

bya*_*gie 5

我不确定您使用的是哪个版本的Rails

但是,如果您使用的是Rails 5,则每当定义一个Emirates_to关联时,默认情况下都需要显示关联记录

您可以将“ required”设置为false以跳过

class  Message < ApplicationRecord
  belongs_to :user, required: false
end
Run Code Online (Sandbox Code Playgroud)

请阅读此以获取更多详细信息