2016-05-11 4 views
-1

Я новичок в рельсах, и это очень простой вопрос. Я пытаюсь понять необходимость внешнего ключа и class_name, но я сталкиваюсь с некоторыми проблемами в понимании этой концепции.
Понимание использования foreign_key и class_name в ассоциации

has_many :task, foreign_key: "created_by" 
has_many :memberships, class_name: "TaskMembership" 

Что такое использование foreign_key и class_name здесь.

+0

Те варианты, чтобы определить пользовательское имя класса и внешний ключ. – Pavan

+0

Что такое использование ??? –

+0

Я уже это сказал. – Pavan

ответ

0

Вот ответ на мой вопрос

Предположим, у вас есть модель пользователя и сообщение model.And вы должны установить ассоциацию, например User has many post

User Model 
has_many :posts 

Post Model 
belongs_to :user 

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

Post Model 
belongs_to :author, class_name: 'User' 

Теперь проблема возникает потому, что рельсы будут искать author_id столбец в таблице сообщений .so здесь вступают в picture.We будет иметь внешний ключ, чтобы найти user_id

Post Model 
belongs_to :author, class_name: 'User', foreign_key: 'user_id' 

Смотреть еще лучшее объяснение association

-1

has_many Ассоциация используется для отношений типа «один ко многим» в рельсах. Например, если у вас есть модель User, которая может иметь много профилей, ваша ассоциация профилей User будет иметь много.

class User < ActiveRecord::Base 
     has_many :profiles 
    end 

    class Profile < ActiveRecord::Base 
     belongs_to :user 
    end 

Если у вас есть внешний ключ, отличный от user_id в таблице профилей, вы явно указываете foreign_key. То же самое относится и к имени класса. Если ваше имя ассоциации отличается от фактического имени модели, вы явно указываете имя класса после ассоциации (как и для членства). Надеюсь, это поможет.

+0

Да, я понимаю, что имя класса явно указано, но когда мы должны это сделать, мой вопрос: как узнать, когда использовать имя класса здесь? –

+0

Предположим, что вам необходимо внедрить систему взаимодействия с Банком. У вас есть класс User, который является общим классом, может использоваться как для сотрудников Банка, так и для клиентов. У вас есть модель связи, и вы хотите сохранить в ней как персонал банка, так и идентификатор клиента. Теперь, как конкретно вы будете взаимодействовать со всеми сотрудниками и взаимодействовать с клиентом? –

+0

Его пример: у вас может быть много разных сценариев, в которых вы не используете ID, имеет свой внешний ключ в связанной модели. У вас может быть модель адреса, используемая для Банка и Пользователя.Вы можете сказать, что bank has_one bank_address, class_name: «Адрес» –

-1

в модели

class First < ActiveRecord::Base 
    has_many :seconds 
end 

class Second < ActiveRecord::Base 
    belongs_to :first 
end 

и в вашей второй таблице классов, создать first_id столбец

Смежные вопросы