tôi là tạo ra một mạng xã hội trong Rails và tôi có một mô hình như thế này:Hai cột phải không bằng nhau trong 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
Vấn đề là bạn không thể thêm cho mình như một người bạn, vì vậy tôi cố gắng này trong mô hình của tôi:
def validate
if :user1_id == :user2_id
record.errors.add "You cannot add yourself as a friend."
return false
end
end
Và tôi có điều này trong bộ điều khiển của tôi:
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
(nơi session[:user]
là uid của người dùng hiện đã đăng nhập)
Tuy nhiên, khi tôi truy cập http://localhost:3000/profile/addfriend/2.xml
trong khi tôi đăng nhập với tư cách người dùng 2
, Rails trả lại cho tôi Friendship
mới, thay vì thông báo lỗi và khi tôi thực hiện nhìn vào cơ sở dữ liệu của tôi, các Friendship
cũng có (và nó không nên). Ai đó có thể vui lòng giải thích cho tôi cách khắc phục điều này không? Cảm ơn
FYI trong việc di chuyển, bạn có thể chỉ cần sử dụng t.timestamps thay vì t.datetime "created_at" và t.datetime "updated_at". –
@Beerlington: Tôi vừa sao chép một phần của db/schema.rb –