Ich bin ein soziales Netzwerk in Rails zu schaffen, und ich habe ein Modell wie folgt aus:Zwei Spalten müssen sich in Rails nicht gleich
create_table "friendships", :force => true do |t|
t.integer "user1_id"
t.integer "user2_id"
t.boolean "hasaccepted"
t.datetime "created_at"
t.datetime "updated_at"
end
Das Problem ist, dass Sie sich als Freund nicht hinzufügen können, so habe ich versucht, dies in meinem Modell:
def validate
if :user1_id == :user2_id
record.errors.add "You cannot add yourself as a friend."
return false
end
end
Und ich habe dies in meinem Controller:
def addfriend
if params[:id]
@friendship = Friendship.new()
@friendship.user1_id = session[:user]
@friendship.user2_id = params[:id]
respond_to do |format|
if @friendship.save
format.html { redirect_to "/" } # Yes, SO users, I will fix this redirect later and it is not important for now.
format.xml { render :xml => @friendship, :status => :created }
else
format.html { redirect_to "/" }
format.xml { render :xml => @friendship.errors, :status => :unprocessable_entity }
end
end
end
end
(wo session[:user]
ist die Benutzer-ID der derzeit in Benutzer signiert)
Allerdings, wenn ich zu http://localhost:3000/profile/addfriend/2.xml
gehen, während ich als Benutzer 2
angemeldet bin, Rails gibt mir die neuen Friendship
, statt einer Fehlermeldung, und wenn ich eine nehmen Schau dir meine Datenbank an, die Friendship
ist auch da (und sollte es nicht). Kann mir bitte jemand erklären, wie ich das beheben kann? Danke
FYI in der Migration, können Sie einfach t.timestamps anstelle von t.datetime "created_at" und t.datetime "updated_at". –
@Beerlington: Ich habe gerade einen Teil von db/schema.rb –