Нужна помощь в связывании данных из одной модели в другую - PullRequest
0 голосов
/ 29 марта 2012

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

class Hunt < ActiveRecord::Base

  has_many :tasks
  attr_accessible :name
  validates :name,  :presence => true,
                    :length   => { :maximum => 50 } ,
                    :uniqueness => { :case_sensitive => false }

end


class Task < ActiveRecord::Base

  belongs_to :hunts
  attr_accessible :name
  validates :name,  :presence => true,
                    :length   => { :maximum => 50 } ,
                    :uniqueness => { :case_sensitive => false }

end

Я предполагаю, что мне нужно написать представление, которое показывает охоту, а затем перечисляет все доступные задачи. Тогда мне нужен способ, чтобы пользователь "выбрал" задачу и добавил ее на охоту. Это последняя часть, которая поставила меня в тупик.

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Я предполагаю, что мне нужно написать представление, которое показывает охоту, а затем перечисляет все доступные задачи.Тогда мне нужен способ, чтобы пользователь "выбрал" задачу и добавил ее на охоту.Это последняя часть, которая поставила меня в тупик.

Выше подразумевается, что есть has_and_belongs_to_many (*..*) связь между Hunt и Task, а не has_many (так как Охота можетбыть связан с несколькими Задачами, и Задача может принадлежать нескольким Охотам в вашей системе.)

Вы можете использовать:

class Hunt < ActiveRecord::Base
  [...]
  has_and_belongs_to_many :tasks
  [...]
end # Hunt

class Task < ActiveRecord::Base
  [...]
  has_and_belongs_to_many :hunts
  [...]
end

Это позволит вам связать несколько Задач (или выможет связать только одну, если хотите), а также иметь задание, принадлежащее более чем одной охоте.Кроме того, вы можете воспользоваться простым помощником тегов формы f.select, чтобы отобразить список доступных задач в вашей системе.

Надеюсь, это поможет.

1 голос
/ 29 марта 2012

Некоторые хорошие источники информации:

  1. Руководства по Ruby on Rails: помощники ActionView - дают хорошую отправную точку и обзор

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

  3. Rails бросает вложенную модель - здесь показано, как обращаться с вложенными или has_many отношениями.

Теперь по вопросу добавления задачи и добавления охоты с формой, которая использует вложенные атрибуты, вы можете иметь представление, отображающее задачу, позволяющее добавить охоту. Операция добавления может потребовать некоторый Javascript (как показано в RailsCasts) или иным образом иметь всплывающее окно, которое выполняет hunt.tasks.build в контроллере. Сборка ассоциации назначит текущий идентификатор поиска для задачи, которая создается.

Теперь, если у вас есть список задач, предварительно назначенных для охоты, вам нужно, чтобы в форме отображался список выбора для задач, принадлежащих охоте. Использование вложенных атрибутов в определении модели, как в:

class Hunt < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
end

class Task < ActiveRecord::Base
  belongs_to :hunts
end

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

Более подробная информация содержится в Rails API принимает вложенные атрибуты , а ссылка на RailsCast предоставит пошаговый пример.

0 голосов
/ 29 марта 2012

Ваше объявление belongs_to в классе Task должно быть для :hunt, а не :hunts.

Что касается представления, все довольно просто.Просто используйте f.select (при условии, что имя вашей вспомогательной переменной формы f) на :hunt_id и обновите атрибут hunt_id внутри Task.

Это будет ассоциировать Hunt с Task.

Обязательно отметьте options_for_select, чтобы вы могли отобразить имя Hunt со значением параметра hunt_id в форме.Я также рекомендую прочитать руководство Rails по ассоциациям: http://guides.rubyonrails.org/association_basics.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...