Создание моделей с помощью двух слов

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1

Вопрос:

У меня есть две модели, одна из которых называется BusinessUser, а другая — BusinessPlace. У бизнес-пользователя может быть много бизнес-площадок

 class BusinessUser < ActiveRecord::Base  
  has_many :BusinessPlaces
end

class BusinessPlace < ActiveRecord::Base
  belongs_to :BusinessUser
end
  

Когда я пытаюсь получить доступ к @business_user.BusinessPlaces.count sql, который получает сборку и запускается в БД, равен

 SELECT COUNT(*) FROM "business_places"  WHERE "business_places"."business_user_id" = 1
  

но при миграции и в базе данных столбец для идентификатора бизнес-пользователя — BusinessUser_id, что приводит к сбою запроса. Почему sql неправильно строится? Я использовал консоль для создания моделей.

Комментарии:

1. Как вы создавали модели? С rails g ModelName помощью ?

2. С помощью rails g model BusinessUser

3. Люди, прекратите отвечать на вопросы такого рода и просто отправьте создателей вопросов в guides.rubyonrails.org Перестаньте тратить время даром.

Ответ №1:

Вам просто нужно установить foreign_key, для которого будет использоваться ассоциация :business_user :

 class BusinessUser < ActiveRecord::Base  
  has_many :business_places
end

class BusinessPlace < ActiveRecord::Base
  belongs_to :business_user, :foreign_key => 'BusinessUser_id'
end
  

Комментарии:

1. Использование :foreign_key работает. Теперь мой класс выглядит так: class BusinessUser < ActiveRecord::Base has_many:BusinessPlaces , :foreign_key => ‘BusinessUser_id’ заканчивается на:business_user не работает

Ответ №2:

Вы используете неправильную формулировку для ключей. Ваши модели должны выглядеть так:

 class BusinessUser < ActiveRecord::Base  
  has_many :business_places
end

class BusinessPlace < ActiveRecord::Base
  belongs_to :business_user
end
  

поэтому в основном используйте:business_places вместо:BusinessPlaces

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