List all associated model records present in another model present in another namespace in rails

只谈情不闲聊 提交于 2019-12-25 00:29:35

问题


I have two models like:

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

2nd

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

But when I search like

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

Its give error: 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'

Table names in database is as:

1. garments
2. superadmin_companies

please provide if there is a correct way to search using rails foreign key associations relation.

Data base is as:

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)

回答1:


As per the description mentioned in the post and the comments in one of the answers it seems like the relation defined in the models is unable to relate with the column names.

For it to work, please change to the one below:

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

Now it will start mapping the with the foreign_key specified in the relationship.




回答2:


Update association as below:

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



回答3:


There is no company_id column in the garments table. You have to add it via migration. Try:

rails generate migration AddCompanyToGarment company:references


来源:https://stackoverflow.com/questions/53942615/list-all-associated-model-records-present-in-another-model-present-in-another-na

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!