【问题标题】:How to add multiple categories in Rails?如何在 Rails 中添加多个类别?
【发布时间】:2019-10-15 12:56:42
【问题描述】:

我使用 Ruby on Rails 5.2.3 和 Mongoid

我尝试添加多个类别。

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 %>

当我尝试保存时出现“类别不能为空白”的错误

日志

TicketsController#create 作为 HTML 参数处理: {"utf8"=>"✓", "authenticity_token"=>"rZyRkTPqTdM//ymnKGsm4Ctm5Co7YgAnSQg6oOaOVv4qEua1QB6cxclId2H4lm1rHG49H/2KomLWab1FaKnf1g==", "ticket"=>{"name"=>"test", "description"=>"test", "category_id"=>["5d0939d51996da62c1bd4699", "5d0939de1996da62c1bd469a"]}, "commit"=>"保存"} MONGODB | 本地主机:27017 | remote_development.find |开始 | {"查找"=>"用户", "过滤器"=>{"_id"=>BSON::ObjectId('5d77b34d1996da1a261c111d')}, "排序"=>{"_id"=>1}, "限制"=>1, "singleBatch"=>true, "lsid"=>{"id"=>}} MONGODB |本地主机:27017 | remote_development.find |成功 | 0.002s 本地主机:27017 | remote_development.find |开始 | {"查找"=>"类别", "过滤器"=>{"_id"=>[BSON::ObjectId('5d0939d51996da62c1bd4699'), BSON::ObjectId('5d0939de1996da62c1bd469a')]}, "limit"=>1, "singleBatch"=>true, "lsid"=>{"id"=>}} MONGODB |本地主机:27017 | remote_development.find |成功 | 0.003s 渲染 布局/应用程序中的tickets/new.html.erb 渲染 shared/_error_messages.html.erb (0.9ms) MONGODB |本地主机:27017 | remote_development.find |开始 | {"查找"=>"类别", "过滤器"=>{}, "lsid"=>{"id"=>}} MONGODB |本地主机:27017 | remote_development.find |成功 | 0.001s 渲染 门票/_form.html.erb (9.7ms) 内渲染的门票/new.html.erb 布局/应用程序 (12.9ms) 渲染共享/_nav.html.erb (1.9ms) 在 120 毫秒内完成 200 次 OK(查看次数:104.9 毫秒 | MongoDB:0.0 毫秒)

【问题讨论】:

  • 请检查是否在strong_params中添加了相同
  • params.require(:ticket).permit(category_id: [])
  • 乍一看,这看起来不错。所以,它必须工作。如果不是,会发生什么?,一定有问题,对吧?,并且您共享的代码不足以猜测发生了什么。如果您添加您的请求日志,控制器中执行更新的部分代码(或者如果您使用表单对象,然后共享该部分),还可以分享您在模型中的关联方式,等等.
  • @fanta 是的,出了点问题。我添加了代码

标签: ruby-on-rails mongoid


【解决方案1】:

您将 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 的复数形式。

【讨论】:

    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多