Запуск Rails 4 здесь. Я просто потратил 2 часа, пытаясь понять это безрезультатно. Кто-нибудь, пожалуйста, объясните, что я здесь делаю неправильно?Rais 4:: has_many,: сквозные и имена таблиц
Шаг 1: Создание миграции
rails g migration CreateJoinTableCommandContact command contact
Ste 2: Изменение миграции, чтобы добавить дополнительный notification_type
столбец.
class CreateJoinTableCommandContact < ActiveRecord::Migration
def change
create_join_table :commands, :contacts, :id => false do |t|
t.index [:contact_id, :command_id]
t.string "notification_type", :null => false
end
end
end
Это приводит имена таблиц commands_contacts
(как множественное число)
Шаг 3: Создание модели
command.rb
class Command < ActiveRecord::Base
has_many :command_contacts
has_many :contacts, :through => :command_contacts
end
contact.rb
class Contact < ActiveRecord::Base
has_many :command_contacts
has_many :host_commands, -> { where notification_type: 'host' }, class_name: 'CommandContact'
has_many :host_notification_commands, :through => :host_commands, class_name: 'Command', :source => :command
has_many :service_commands, -> { where notification_type: 'service' }, class_name: 'CommandContact'
has_many :service_notification_commands, :through => :service_commands, class_name: 'Command', :source => :command
end
commands_contacts.rb join model
class CommandContact < ActiveRecord::Base
belongs_to :command
belongs_to :contact
end
Шаг 4: Проверьте его.
irb(main):001:0> Contact.first.host_notification_commands
Какие результаты в следующих ошибок
Contact Load (0.2ms) SELECT `contacts`.* FROM `contacts` ORDER BY `contacts`.`id` ASC LIMIT 1
Mysql2::Error: Table 'ngconf_development.command_contacts' doesn't exist: SHOW FULL FIELDS FROM `command_contacts`
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'ngconf_development.command_contacts' doesn't exist: SHOW FULL FIELDS FROM `command_contacts`
Я попытался, используя все мыслимые комбинации команды (ами) и контакта (ов) в моей миграции и модели, но до сих пор не могут получить эту Работа. Что я здесь делаю неправильно?
Почему он пытается использовать command_contacts с командой в единственной форме?
Любая причина, по которой вы не используете 'has_and_belongs_to_many'? :) – Hesham
@ H-man: Да, сэр. Мне нужно иметь дополнительный атрибут ': notification_type' в таблице join_contacts join, и это невозможно с' has_and_belongs_to_many' – solefald