Новый разработчик рельсов здесь пытается узнать, как работать с активными ассоциациями записей.
Я создаю приложение для планирования событий и работаю над функцией приглашения.У меня уже есть базовая форма создания события «когда / где», и теперь я хочу, чтобы создатель события мог сгенерировать список пользователей, приглашенных на событие, из списка друзей создателя на сайте (друзья записываютсярефлексивное has_many: через дружеские отношения по модели User).Я настроил модель приглашения has_many: through для представления связи между многими событиями и пользователями (приглашенными).Соответствующие модели выглядят так:
User.rb
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, :through => :friendships
attr_accessor :password
attr_accessible :first_name, :middle_name, :last_name, :email,:password, :password_confirmation
has_many :events
has_many :invitations, :foreign_key => :invitee_id
has_many :inviting_events, :through => :invitations, :source => :event
end
Event.rb
class Event < ActiveRecord::Base
attr_accessible :title, :description, :location, :time_start, :time_end, :event_access_type
belongs_to :user
has_many :invitations
has_many :invitees, :through => :invitations
accepts_nested_attributes_for :invitations
end
Friendship.rb
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User"
end
Приглашение.rb
class Invitation < ActiveRecord::Base
belongs_to :event
belongs_to :invitee, :class_name => "User"
end
Я пытаюсь с помощью формы создать выпадающий список с включенным множественным выбором (ужасный интерфейс, я знаю, но это только для целей тестирования и создания прототипов), который заполняетсяс друзьями текущего пользователя на сайте.Для этого в настоящее время я использую этот вспомогательный метод формы:
<%= collection_select(:friendship, :friend_id, current_user.friendships , :friend_id, :friends_name, {}, html_options = {:multiple => true}) %>
, который генерирует выпадающий список, в котором я хочу представить friend_ids (то есть user_ids) пользователей, которых хочет пригласить создатель события.Мой следующий шаг заключается в том, чтобы сделать эти выборки после отправки и использовать каждое из значений friend_id, чтобы затем создать новую ассоциацию приглашения между созданным событием и другом.Насколько я понимаю, так как это многомодельная форма, мне нужно будет включить "accepts_nested_attributes_for: invitations" в модель событий.Моя основная проблема заключается в том, что мне неясно, какой должна быть форма и синтаксис контроллера, чтобы принимать отправленные раскрывающиеся значения и использовать их для генерации новых объектов приглашения.Вот моя последняя попытка просмотра формы:
_event.form.html.erb
<%= form_for(@event) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :location %><br />
<%= f.text_field :location %>
</div>
<% f.fields_for :invitation do |invitation_form| %>
<div class="field">
<%= invitation_form.label "Who's invited?" %><br />
<%= collection_select(:friendship, :friend_id, current_user.friendships , :friend_id, :friends_name, {}, html_options = {:multiple => true}) %>
</div>
<% end %>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
Буду очень признателен, если кто-то сможет высказать свое мнение о том, как это будет сделано, и еслиЯ допускаю любые ошибки в отношении используемых мной отношений или методов форм.
Спасибо!