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而不进行关联?
我不确定您使用的是哪个版本的Rails
但是,如果您使用的是Rails 5,则每当定义一个Emirates_to关联时,默认情况下都需要显示关联记录
您可以将“ required”设置为false以跳过
class Message < ApplicationRecord
belongs_to :user, required: false
end
Run Code Online (Sandbox Code Playgroud)