現在、新しいメンバーを作成してチームに追加しようとすると、重複するメンバーがないことを確認しています。Rails 3:カスタムモデル通知
members_controller.rb
def create
@team = current_team
player = Player.find(params[:player_id])
@member = @team.add_player(player.id)
respond_to do |format|
if @member.save
format.html { redirect_to(@team, :notice => 'Member was successfully added.') }
format.js { @current_member = @member }
format.xml { render :xml => @member,
:status => :created, :location => @member }
else
format.html { redirect_to(@team, :notice => 'Member already exists.') }
format.xml { render :xml => @member.errors,
:status => :unprocessable_entity }
end
end
end
team.rb
def add_player(player_id)
current_member = members.build(:player_id => player_id)
current_member
end
私が追加されているプレーヤーのさまざまなプロパティをチェックしteam.rbの私add_player方法にいくつかのロジックを追加します。このアクションは、 'Member already exists'以外の複数の失敗メッセージを必要とします。モデルレイヤーでこれを行うにはどうすればよいですか?
これを実装する方法はわかりません。私がチェックしたいすべての属性がメンバーにあります。チーム内に条件を把握するメソッドがあるため、チーム内で条件をチェックしたいメソッドがあります。私はベースを使用しようとしましたが、次のようなものを試したときに状態がトリップしたようには思えませんでした: errors.add(:base、 'Custom error message here')if method_returns_one> 2 –
メンバーモデルあなたがチェックしているものが、チームの文脈でのみ有効であるか無効であるかを除きます。メンバーオブジェクトが有効でない場合、メンバーはチームを介して構築されているため、チームオブジェクトはどちらも対象になりません。 –
また、チームのカスタムエラーを表示するには、saveを呼び出す前にadd_playerメソッドを少なくとも1回呼び出して計算を行う必要があります。これらのエラーチェックを "validate"という名前のメソッドに移す方が良いかもしれません。レコードが有効かどうかをチェックするとき、Railsは自動的にこの名前のメソッドを探します –