如何在 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_id
的 belongs_to
关联。你实际上需要一个 has_many
或 has_and_belongs_to_many
关系 https://docs.mongodb.com/mongoid/current/tutorials/mongoid-relations/#has-and-belongs-to-many 所以它是一个多重关系并且属性将是 category_ids
的复数形式。
我在 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_id
的 belongs_to
关联。你实际上需要一个 has_many
或 has_and_belongs_to_many
关系 https://docs.mongodb.com/mongoid/current/tutorials/mongoid-relations/#has-and-belongs-to-many 所以它是一个多重关系并且属性将是 category_ids
的复数形式。