保存没有外键的连接表项

时间:2012-12-12 05:39:57

标签: ruby-on-rails many-to-many jointable

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

感谢。

1 个答案:

答案 0 :(得分:1)

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