如何在 Rails 中添加多个类别?

How to add multiple categories in Rails?

我在 Rails 5.2.3 和 Mongoid

上使用 Ruby

我尝试添加多个类别。

category.rb

class Category
  include Mongoid::Document
  has_many :tickets
  belongs_to :user
end

ticket.rb

class Ticket
  include Mongoid::Document

  belongs_to :user
  belongs_to :category, touch: true
end

tickets/_form.html.erb

<%= form_for(@ticket, html: { role: 'form' }) do |f| %>

  <%= f.collection_select :category_id, Category.all, :id, :title, options = { include_hidden: false }, html_options = { multiple: true } %>

  <%= f.submit 'Save' %>
<% end %>

当我尝试保存时出现错误 "Category can't be blank"

日志

Processing by TicketsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"rZyRkTPqTdM//ymnKGsm4Ctm5Co7YgAnSQg6oOaOVv4qEua1QB6cxclId2H4lm1rHG49H/2KomLWab1FaKnf1g==", "ticket"=>{"name"=>"test", "description"=>"test", "category_id"=>["5d0939d51996da62c1bd4699", "5d0939de1996da62c1bd469a"]}, "commit"=>"Save"} MONGODB | localhost:27017 | remotely_development.find | STARTED | {"find"=>"users", "filter"=>{"_id"=>BSON::ObjectId('5d77b34d1996da1a261c111d')}, "sort"=>{"_id"=>1}, "limit"=>1, "singleBatch"=>true, "lsid"=>{"id"=>}} MONGODB | localhost:27017 | remotely_development.find | SUCCEEDED | 0.002s MONGODB | localhost:27017 | remotely_development.find | STARTED | {"find"=>"categories", "filter"=>{"_id"=>[BSON::ObjectId('5d0939d51996da62c1bd4699'), BSON::ObjectId('5d0939de1996da62c1bd469a')]}, "limit"=>1, "singleBatch"=>true, "lsid"=>{"id"=>}} MONGODB | localhost:27017 | remotely_development.find | SUCCEEDED | 0.003s Rendering tickets/new.html.erb within layouts/application Rendered shared/_error_messages.html.erb (0.9ms) MONGODB | localhost:27017 | remotely_development.find | STARTED | {"find"=>"categories", "filter"=>{}, "lsid"=>{"id"=>}} MONGODB | localhost:27017 | remotely_development.find | SUCCEEDED | 0.001s Rendered tickets/_form.html.erb (9.7ms) Rendered tickets/new.html.erb within layouts/application (12.9ms) Rendered shared/_nav.html.erb (1.9ms) Completed 200 OK in 120ms (Views: 104.9ms | MongoDB: 0.0ms)

您正在将 2 个 ID 传递给名称为 category_idbelongs_to 关联。你实际上需要一个 has_manyhas_and_belongs_to_many 关系 https://docs.mongodb.com/mongoid/current/tutorials/mongoid-relations/#has-and-belongs-to-many 所以它是一个多重关系并且属性将是 category_ids 的复数形式。