ユーザーとクラブの 2 つのモデルがあります。ユーザーは、クラブを作成してから、クラブにメンバーを追加できます。これを達成するために、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なしで保存する方法を知りたいです。そのクラブ メンバーの名前をクラブ ページに表示できるようにしたいのですが、明らかにプロフィールへのリンクはありません。次に、メールを使用して、誰かが私のサイトのクラブのメンバーであることを示していることを示すメッセージを送信することができますが、主にその名前をそのクラブのページに表示したままにしたい.
ありがとう。