Rails HABTM ActiveRecord :: RecordNotFound в действии обновления - PullRequest
0 голосов
/ 11 февраля 2019

Я установил связь, используя HABTM с Rails, с двумя моделями: Site и User.

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ищет идентификаторы сайта, которые на самом деле должны быть идентификаторами пользователей.Идентификатор сайта кажется правильным в параметрах:

Параметры запроса

{"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"}

Что-то идет не так, как надо!Любая идея ?Спасибо

1 Ответ

0 голосов
/ 11 февраля 2019

Ваши ключи class_name задом наперед.

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

has_and_belongs_to_many :sites

Вам не нужно иметь атрибут class_name в модели User, поскольку Rails может вывести класс Site.

Rails имеет очень обширную документацию для отношений.

...