Я пытаюсь изменить логику в контроллере RESTful. В текущей реализации у меня есть следующее:
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
has_many :members, :dependent => :destroy
def add_player(player_id)
current_member = members.find_by_player_id(player_id)
if current_member
# will not add duplicate member
else
current_member = members.build(:player_id => player_id)
end
current_member
end
Этому не хватает некоторых функциональных возможностей, так как я хочу иметь возможность контролировать, сохраняется ли член, проверяя другие атрибуты участника в отношении игрока. В текущей реализации, если я пытаюсь добавить уже существующего участника, он все равно перенаправляется на @team с уведомлением «Участник был успешно добавлен», даже если ни один член не добавляется. Если я попытаюсь удалить избыточность, выполнив следующее, контроллер добавит дублирующиеся элементы.
@team = current_team
@member = @team.add_player(:player_id)
Почему моя текущая логика позволяет мне не сохранять дубликат участника, но все еще отвечает на маршрут @ member.save? Как мне правильно его контролировать?