Взаимосвязь между вашим пользователем и моделью спортсмена по сути является has_and_belongs_to_many
(HABTM). Обращаясь туда-сюда с вами, кажется, вы не понимаете, каким будет лучший способ создать эти отношения.
Хорошим местом для начала чтения будет документация для ассоциаций ActiveRecord, в частности документация для отношений HABTM .
С настройкой модели все в порядке. Теперь, когда у вас есть настройки отношений HABTM, вот что вы можете сделать. Предположим, что ваша модель Athlete и User очень проста и не имеет ничего, кроме атрибута name
, который является строкой. Теперь вы можете сделать такой код (это вывод консоли через консоль rails):
User.create(:name => "Jeff")
usr = User.first
=> #<User id: 1, name: "Jeff">
usr.athletes
=> []
atl = usr.athletes.create(:name => "Mike")
=> #<Athlete id: 1, name: "Mike">
В строке выше будет создан пользователь с именем Mike, и он автоматически создаст запись отношения с соответствующими атрибутами, чтобы связать их. Так что теперь, если вы называете это:
usr.athletes
=> [#<Athlete id: 1, name: "Mike">]
Теперь, если вы хотите, чтобы пользователь мог определять отношения между собой и спортсменом при создании спортсмена, вы можете настроить класс отношений как поле relation
типа string
, а также при создании отношений. (как я только что показал выше), вы можете сделать что-то вроде этого:
rel = usr.relationships.where(:user_id => usr.id, :athlete_id => atl.id).first
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => nil>
rel.relation = "Friend"
rel.save
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => "Friend">
Надеюсь, это более полезно, чем мой первоначальный ответ. Дайте знать, если у вас появятся вопросы. И обязательно ознакомьтесь с документацией ассоциаций ActiveRecord, о которой я упоминал выше.