использование collection_select в форме с accepts_nested_attributes_for для генерации отношений «многие ко многим» - PullRequest
0 голосов
/ 12 июня 2011

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

Я создаю приложение для планирования событий и работаю над функцией приглашения.У меня уже есть базовая форма создания события «когда / где», и теперь я хочу, чтобы создатель события мог сгенерировать список пользователей, приглашенных на событие, из списка друзей создателя на сайте (друзья записываютсярефлексивное 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 %>

Буду очень признателен, если кто-то сможет высказать свое мнение о том, как это будет сделано, и еслиЯ допускаю любые ошибки в отношении используемых мной отношений или методов форм.

Спасибо!

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