Создание контроллеров и представлений для отношения has_many: through в Rails 3 - PullRequest
6 голосов
/ 09 ноября 2011

Существует множество учебных пособий, в которых показано, как создавать инструкции модели для отношения has_many: through в Rails, но, похоже, не так много статей, связанных с процессом настройки форм для создания и редактирования этих отношений.Я ищу некоторую помощь (или хорошие примеры) того, как создать интерфейс, который позволит пользователям управлять этими типами отношений в приложении Rails.

Вот сценарий:

У меня есть пользователи, отношения и спортсмены.Пользователь может иметь отношения со спортсменом в различных ролях: тренер, наставник, родитель или поклонник.

Вот мои модели:

class User < ActiveRecord::Base
  has_many :relationships
  has_many :athletes, :through => :relationships
end

class Athlete < ActiveRecord :: Base
  has_many :relationships
  has_many :users, :through => :relationships
end

class Relationship < ActiveRecord :: Base
  belongs_to :users
  belongs_to :athletes
end

Итак,Следующим шагом будет создание представлений и контроллеров, которые позволят мне создать отношение «пользователь-спортсмен» (с ролью тренера, родителя и т. д.), отредактировать это отношение или уничтожить его.

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

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

Если у кого-то есть ссылка или пример, который может решить эту проблему на простом уровне, я смогу настроить остальные.

Ответы [ 2 ]

5 голосов
/ 09 ноября 2011

Взаимосвязь между вашим пользователем и моделью спортсмена по сути является 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, о которой я упоминал выше.

0 голосов
/ 09 ноября 2011

Попробуйте Railscasts или Ascii броски.Вот где я обычно начинаю.Не уверен, что это то, что вам нужно, но на этих сайтах есть учебник для вложенных форм.Я думаю, что это в сложных формах.Стоит ли читать или смотреть в любом случае.

...