Перечислите все связанные записи модели, присутствующие в другой модели, присутствующей в другом пространстве имен в рельсах - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть две модели, такие как:

class Superadmin::Company < ApplicationRecord
  belongs_to :user
  has_many :garments
end

2-ой

class Garment < ApplicationRecord
   belongs_to :company ,:class_name => "Superadmin::Company"
end

Но когда я ищу как

company = Superadmin::Company.find(9)
company.garments

Выдает ошибку: as

 Garment Load (1.3ms)  SELECT `garments`.* FROM `garments` WHERE `garments`.`company_id` = 9 ORDER BY created_at asc
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'garments.company_id' in 'where clause': SELECT `garments`.* FROM `garments` WHERE `garments`.`company_id` = 9 ORDER BY created_at asc
    from /home/tukatech/rails_projects/live_tukagarments/.bundle/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:218:in `query'

Имена таблиц в базе данных:

1. garments
2. superadmin_companies

, укажите, пожалуйста, есть ли правильный способ поиска с использованием отношения ассоциаций внешних ключей rails.

База данных имеет вид:

mysql> desc superadmin_companies;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255) | YES  |     | NULL    |                |
| address           | varchar(255) | YES  |     | NULL    |                |
| phone             | varchar(255) | YES  |     | NULL    |                |
| user_id           | int(11)      | YES  | MUL | NULL    |                |
| created_at        | datetime     | NO   |     | NULL    |                |
| updated_at        | datetime     | NO   |     | NULL    |                |
| logo_file_name    | varchar(255) | YES  |     | NULL    |                |
| logo_content_type | varchar(255) | YES  |     | NULL    |                |
| logo_file_size    | int(11)      | YES  |     | NULL    |                |
| logo_updated_at   | datetime     | YES  |     | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)

mysql> desc garments;
+--------------------------+--------------+------+-----+---------+----------------+
| Field                    | Type         | Null | Key | Default | Extra          |
+--------------------------+--------------+------+-----+---------+----------------+
| id                       | int(11)      | NO   | PRI | NULL    | auto_increment |
| xhtml_file_file_name     | varchar(255) | YES  |     | NULL    |                |
| xhtml_file_content_type  | varchar(255) | YES  |     | NULL    |                |
| xhtml_file_file_size     | int(11)      | YES  |     | NULL    |                |
| xhtml_file_updated_at    | datetime     | YES  |     | NULL    |                |
| xhtml_thumb_file_name    | varchar(255) | YES  |     | NULL    |                |
| xhtml_thumb_content_type | varchar(255) | YES  |     | NULL    |                |
| xhtml_thumb_file_size    | int(11)      | YES  |     | NULL    |                |
| xhtml_thumb_updated_at   | datetime     | YES  |     | NULL    |                |
| created_at               | datetime     | NO   |     | NULL    |                |
| updated_at               | datetime     | NO   |     | NULL    |                |
| category                 | varchar(255) | YES  |     | NULL    |                |
| garment_type             | varchar(255) | YES  |     | NULL    |                |
| user_id                  | int(11)      | YES  |     | NULL    |                |
| superadmin_company_id    | int(11)      | YES  | MUL | NULL    |                |
+--------------------------+--------------+------+-----+---------+----------------+
15 rows in set (0.00 sec)

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

В соответствии с описанием, упомянутым в посте, и комментариями в одном из ответов, кажется, что отношение, определенное в моделях, не может быть связано с именами столбцов.

Чтобы это работало, пожалуйста, изменитек приведенному ниже:

class Superadmin::Company < ApplicationRecord
  belongs_to :user
  has_many :garments, class_name: "Garment", foreign_key: "superadmin_company_id"
end

Теперь начнется сопоставление с ключом foreign_key, указанным в отношении.

0 голосов
/ 27 декабря 2018

Обновить ассоциацию, как показано ниже:

class Superadmin::Company < ApplicationRecord
  has_many :garments, foreign_key: 'superadmin_company_id'
end

class Garment < ApplicationRecord
  belongs_to :company, class_name: 'Superadmin::Company', foreign_key: 'superadmin_company_id'
end
0 голосов
/ 27 декабря 2018

В таблице garments нет столбца company_id.Вы должны добавить его через миграцию.Попробуйте:

rails generate migration AddCompanyToGarment company:references
...