私は問題を修正したと思います。誤って複数形モデルを作成し
rails generate model CompanySkill
:
は私が最初でモデルを生成しました。
invoke active_record
create db/migrate/20160511111214_create_companies_skill.rb
create app/models/company_skill.rb
invoke test_unit
create test/models/company_skill_test.rb
create test/fixtures/companies_skill.yml
私は、テーブル名を変更し、移行を編集した:
class CreateCompaniesSkill < ActiveRecord::Migration
def change
create_table :company_skills do |t| #was :companies_skill
t.integer :skill_id
t.integer :company_id
t.integer :level
t.timestamps null: false
end
end
end
示唆したようにその後、私は最終的にモデルにself.table_nameを使用:
class CompanySkill < ActiveRecord::Base
self.table_name = "company_skills"
belongs_to :company, inverse_of: :company_skills
belongs_to :skill
validates_presence_of :company
validates_presence_of :skill
end
だから今もしコンソールIからcompany_skillを作成してからCompany.first.skillsを実行します。スキルを取得できます
Company.first.skills
Company Load (0.1ms) SELECT "companies".* FROM "companies" ORDER BY "companies"."id" ASC LIMIT 1
Skill Load (0.4ms) SELECT "skills".* FROM "skills" INNER JOIN "company_skills" ON "skills"."id" = "company_skills"."skill_id" WHERE "company_skills"."company_id" = ? [["company_id", 1]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Skill id: 1, name: "Nihil dolorum maiores et ex temporibus est. Volupt...", school_year: 2, created_at: "02/05/2016 20:09:54", updated_at: "02/05/2016 20:09:54">]>
私はself.table_nameを削除する場合は、しかし、私はエラーを取得するActiveRecord::StatementInvalid: Could not find table 'companies_skill'
私はこの権利をやっていますか?
なぜhas_many:companies_skill を使用しませんか? – Boltz0r
私はできるが、言語学的には会社has_many:company_skillsはスキル** S ** **を表しているので、それはより良いです** **会社は –
を持っています。 CompanySkillのほかに、あなたのアプリに他の "スキル"モデルがありますか? EmployeeSkillのように、多分? –