我有两个模型,用户和俱乐部。用户可以创建俱乐部,然后将成员添加到俱乐部。为此,我有一个名为 Membership 的连接表,如下所示:
class Membership < ActiveRecord::Base
attr_accessible :member_id, :club_id, :name, :email
belongs_to :club
belongs_to :member, class_name: "User"
validates :club_id, presence: true
end
为了创建会员,我有一个表格,要求提供俱乐部成员的姓名和电子邮件,并通过隐藏字段传递 :club_id。
<%= form_for(@club.memberships.create(:club_id => @club.id)) do |f| %>
<%= f.hidden_field :club_id %>
<div class="field">
<%= f.text_field :name, placeholder: "Name" %>
</div>
<div class="field">
<%= f.text_field :email, placeholder: "Email" %>
</div>
<div class="action">
<%= f.submit "Add", class: "btn" %>
</div>
<% end %>
:email 被发送到控制器以查找该用户的 ID,并使用 :club_id 和 :member_id 创建会员资格,并将链接到其个人资料的用户名放置在俱乐部的页面上。如果电子邮件地址已与用户关联,则一切正常。
控制器:
def create
@club = Club.find(params[:membership][:club_id])
unless User.find_by_email(params[:membership][:email]).id.nil?
params[:membership][:member_id] = User.find_by_email(params[:membership][:email]).id
@club.memberships.create(params[:membership])
flash[:success] = "Club member successfully added"
redirect_to :back
else
@club.memberships.create(params[:membership]) ##<-- This is where I need help
redirect_to :back
end
end
但是,如果没有与该电子邮件关联的用户,则查找返回 nil,如预期的那样。我想知道如何仅使用名称而不使用 :member_id 来保存此会员资格。我希望它仍然能够在俱乐部页面上显示该俱乐部成员的姓名,但显然没有指向他们个人资料的链接。然后可以使用电子邮件向他们发送一条消息,表明有人表示他们是我网站上某个俱乐部的成员,但主要是我只想让他们的名字仍然显示在该俱乐部的页面上。
谢谢。