2014-11-10 3 views
0
Failures: 

    1) POST /v1/notes/id saves the lat, lon, note text, note photo, recipients, and expiration 
    Failure/Error: post '/v1/notes', { 
    ActiveRecord::StatementInvalid: 
    PG::DatatypeMismatch: ERROR: argument of WHERE must be type boolean, not type integer 
    LINE 1: SELECT "users".* FROM "users" WHERE (45) LIMIT 1 
               ^
    : SELECT "users".* FROM "users" WHERE (45) LIMIT 1 

나는 다음과 같은 방법으로 사용자 개체를 찾아야 만한다고 가정하지만, 어떤 이유로 위의 오류가 나타납니다.PG 오류 - 데이터 불일치

def create 
    @note = Note.new(note_params) 
    if @note.save 
    render 
    end 
end 

private 
def note_params 
    { 
    #user_id: params[:user_id], 
    user_id: user[:id], 
    lat: params[:lat], 
    lon: params[:lon], 
    note_text: params[:note_text], 
    photo_uri: params[:photo_uri], 
    expiration: params[:expiration] 
    } 
end 


def user 
    user = User.find_or_create_by(params[:user_id]) 
end 

난 당신이 note_params에 들어갈 것 user_id를 기반으로 사용자 개체를 만들거나 찾을 user 방법을 사용 싶어한다고 가정하지만, user_id: user[:id]를 사용하는 대신 사이의 차이에 대한 명확한 아니에요 #user_id: params[:user_id].

답변

0

문제는 user 방법에 있습니다. 데이터베이스에 user을 찾거나 만드는 데 필요한 속성이 포함 된 해시를 제공해야합니다.

def user 
    user = User.find_or_create_by(id: params[:user_id]) 
end 

params[:user_id]을 사용하면 params 해시에서 사용자의 ID를 가져올 수 있습니다. user[:id]을 사용하면 사용자 개체를 반환하는 user 메서드를 호출 한 다음 해당 ID를 검색합니다 (user.id을 호출 할 수 있음)