我有两个模型,用户和俱乐部。用户可以创建俱乐部,然后将成员添加到俱乐部。为了实现这一点,我有一个名为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 %>
:电子邮件发送到控制器以查找该用户的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,如预期的那样。我想知道如何只使用名称和no:member_id来保存此成员资格。我希望它仍然能够在俱乐部页面上显示该俱乐部会员的名字,但显然没有链接到他们的个人资料。然后,电子邮件可以用来向他们发送一条消息,表明有人表示他们是我网站上俱乐部的成员,但主要是我只想让他们的名字仍显示在该俱乐部的页面上。
感谢。
答案 0 :(得分:1)
为什么不为新电子邮件创建用户?然后可以解决所有零和显示的东西。保持当前结构的最简单方法。