【问题标题】:List all associated model records present in another model present in another namespace in rails列出存在于另一个模型中的所有关联模型记录,该模型存在于 rails 中的另一个命名空间中
【发布时间】:2019-05-25 08:09:04
【问题描述】:

我有两个模型,例如:

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

第二次

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)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2 ruby-on-rails-5


    【解决方案1】:

    根据帖子中提到的描述和答案之一中的 cmets,模型中定义的关系似乎无法与列名相关。

    为使其正常工作,请更改为以下之一:

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

    现在它将使用关系中指定的 foreign_key 开始映射。

    【讨论】:

      【解决方案2】:

      更新关联如下:

      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】:

        garments 表中没有 company_id 列。您必须通过迁移添加它。试试:

        rails generate migration AddCompanyToGarment company:references
        

        【讨论】:

        • superadmin_company_id 存在于数据库中
        • 哦,那你必须明确指定 _id 字段。将Garment 模型中的belongs_to 关联更改为belongs_to :company ,:class_name =&gt; "Superadmin::Company", :foreign_key =&gt; "superadmin_company_id"
        猜你喜欢
        • 2019-05-25
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        相关资源
        最近更新 更多