Два столбца не должны равняться друг другу в направляющих

Я создаю социальную сеть в направляющих, и у меня есть модель как это:

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] uid, в настоящее время входил в систему пользователь),

Однако, когда я перехожу в http://localhost:3000/profile/addfriend/2.xml в то время как я регистрируюсь как пользователь 2, Направляющие возвращают меня новое Friendship, вместо сообщения об ошибке, и когда я смотрю на свою базу данных, Friendship также там (и это не было должно). Кто-то может объяснить меня, как зафиксировать это?Спасибо

6
задан John Topley 19 February 2010 в 14:05
поделиться

2 ответа

Попробуйте вот так:

class Friendship < ActiveRecord::Base
  validate :cannot_add_self

  private

  def cannot_add_self
    errors.add(:user2_id, 'You cannot add yourself as a friend.') if user1_id == user2_id
  end
end
13
ответ дан 8 December 2019 в 13:45
поделиться
if :user1_id == :user2_id

Это всегда будет false - вы сравниваете символы. Это то же самое, что написать if "user1_id" == "user2_id".

Вы должны написать это как if user1_id == user2_id, чтобы сравнить значения столбцов.

4
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: