新的rails开发人员试图了解我对活动记录关联的看法。
我正在构建一个事件安排应用程序,正在处理邀请功能。我已经有一个基本的when / where事件创建表单,我现在想让事件创建者从网站上创建者的朋友列表中生成一个被邀请参加活动的用户列表(朋友通过以下方式记录)一个反身的has_many:通过用户模型上的友谊关系)。我已经建立了一个has_many:通过邀请模型来表示事件和用户(被邀请者)之间的多对多关系。各个模型看起来像这样:
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
Invitation.rb
class Invitation < ActiveRecord::Base
belongs_to :event
belongs_to :invitee, :class_name => "User"
end
我正在尝试使用该表单生成一个下拉列表,其中启用了多个选项(我知道可怕的UI,但这仅用于测试和原型设计),其中填充了当前用户在网站上的朋友。为此,我目前正在使用此表单辅助方法:
<%= 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 %>
如果有人可以提供关于如何做到这一点的指导,以及我在使用的关系或形式方法方面是否犯了任何错误,那将非常感激。
谢谢!