1

我有两个模型,用户和俱乐部。用户可以创建俱乐部,然后将成员添加到俱乐部。为此,我有一个名为 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 来保存此会员资格。我希望它仍然能够在俱乐部页面上显示该俱乐部成员的姓名,但显然没有指向他们个人资料的链接。然后可以使用电子邮件向他们发送一条消息,表明有人表示他们是我网站上某个俱乐部的成员,但主要是我只想让他们的名字仍然显示在该俱乐部的页面上。

谢谢。

4

1 回答 1

1

为什么不为新电子邮件创建一个用户?然后可以解决所有 nil 和显示的东西。保持当前结构的最简单方法。

于 2012-12-12T06:12:16.970 回答