【问题标题】:Rails HABTM ActiveRecord::RecordNotFound in update actionRails HABTM ActiveRecord::RecordNotFound 在更新操作中
【发布时间】:2019-02-11 07:52:12
【问题描述】:

我使用 HABTM 和 Rails 设置了关联,有两个模型:站点和用户。

Site.rb

  has_and_belongs_to_many :fae_users,
    class_name: "Site",
    foreign_key: "site_id",
    join_table: "sites_users",
    association_foreign_key: "fae_user_id"

用户.rb

    has_and_belongs_to_many :sites,
      class_name: "User",
      foreign_key: "fae_user_id",
      join_table: "sites_users",
      association_foreign_key: "site_id"

Schema.rb

  create_table "sites_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.bigint "site_id"
    t.bigint "fae_user_id"
    t.index ["fae_user_id"], name: "index_sites_users_on_fae_user_id"
    t.index ["site_id"], name: "index_sites_users_on_site_id"
  end

查看:sites/_form.html.slim

= f.collection_select :fae_user_ids, Fae::User.all, :id, :email, {}, {:multiple => true}

现在,当我尝试更新站点并将某些用户与其关联时,出现以下错误:

ActiveRecord::RecordNotFound in Admin::SitesController#update
Couldn't find all Sites with 'id': (3, 2) (found 1 results, but was looking for 2). Couldn't find Site with id 2.

这很奇怪,因为我不明白 Rails 什么时候会寻找那些实际上应该是用户 ID 的站点 ID。 参数中的站点 ID 似乎是正确的:

请求的参数

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"xxxxxxxxxxxx",
 "site"=>
  {"site_status_id"=>"4",
   "fae_user_ids"=>["", "3", "2"],
   "prod_url"=>"",
   "demo_url"=>"",
   "template"=>"",
   "name"=>"Somesite",
   "site_option_ids"=>[""],
   "description"=>"",
   "domain"=>"",
   "discount"=>""},
 "id"=>"10"}

显然出了点问题! 任何的想法 ? 谢谢

【问题讨论】:

  • 转到您的 Rails 控制台并输入 Site.all - 您返回的结果是什么?

标签: ruby-on-rails ruby has-and-belongs-to-many


【解决方案1】:

您的class_name 键向后。

has_and_belongs_to_many :fae_users,
  class_name: 'Fae::User'

has_and_belongs_to_many :sites

您不需要在 User 模型上具有 class_name 属性,因为 Rails 可以推断出 Site 类。

Rails 有很多 extensive documentation 的关系。

【讨论】:

  • 感谢您的回答。如果我使用你的代码,我现在在视图上得到以下错误:NameError in Admin::Sites#edit uninitialized constant Site::User= f.collection_select :fae_user_ids, Fae::User.all, :id, :email, {}, {:multiple => true}
  • 我已经修好了,谢谢!类名是Fae::User,因为它来自一个引擎
  • @SimonMo 很高兴我能帮上忙!从给定的代码中,我对Fae::UserUser 持观望态度。我为后代更新了答案。如果您可以接受答案,它将帮助未来的用户,如果他们有同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多