1

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

ありがとう。

4

1 に答える 1

1

新しいメールのユーザーを作成してみませんか?そうすれば、すべてのnilと表示するものを解決できます。現在の構造を維持する最も簡単な方法。

于 2012-12-12T06:12:16.970 に答える