Я создаю социальную сеть в Rails и у меня есть модель, как это:Две колонны должны не равны друг другу в Rails
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
Проблема заключается в том, что вы не можете добавить себя в другом, так что я пытался это в моей модели:
def validate
if :user1_id == :user2_id
record.errors.add "You cannot add yourself as a friend."
return false
end
end
И у меня есть это в мой контроллер:
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
(где session[:user]
является УИДОМ в настоящее время регистрируется пользователь)
Однако, когда я иду в http://localhost:3000/profile/addfriend/2.xml
в то время как я подписал как пользователь 2
, Rails возвращает мне новый Friendship
, вместо сообщения об ошибке, и когда я взять посмотрите мою базу данных, также есть Friendship
(и это не должно). Может кто-нибудь, пожалуйста, объясните мне, как это исправить? Спасибо
FYI в вашей миграции, вы можете просто использовать t.timestamps вместо t.datetime "created_at" и "t.datetime updated_at". –
@Beerlington: Я просто скопировал часть db/schema.rb – 2010-02-19 17:16:55