2013-12-12 8 views
0

Я хочу обновить модель с помощью обновления контроллера #. Я хочу сделать это через AJAX и не иметь скрытую форму или любые элементы DOM, чтобы синхронизировать с данными JS.Rails controller # update, дающий неверный тип для параметров

Как я могу отправить данные на обновление контроллера # через jQuery ajax?

Мои JS:

$.ajax({ 
    type: "PATCH", 
    url: "/uploads/" + current_upload.id, 
    data: { 
    "upload[user]": user.id, 
    "upload[upload]": current_upload.id 
    } 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

Мой контроллер:

def update 
    @upload = Upload.find(params[:id]) 

    # update the model. 
    if @upload.update(upload_params) 
     redirect_to @post 
    else 
     render 'edit' 
    end 
    end 

    private 
    def upload_params 
     # permit! allows all attributes. 
     params.require(:upload).permit(:user) 
    end 

Ошибка:

User(#70101060061080) expected, got String(#70101055761460) 

ответ

2

Изменить "upload[user]": user.id быть "upload[user_id]": user.id.

Внутри Rails он пытается присвоить user (экземпляр пользователя) строку, через которую вы проходите через user.id, и жалуетесь на несоответствие типа.

+0

интересно, Rails также делает 'upload' (upload instance) из' upload [upload] '? Ahhh так в 'params.require()' Я не указываю строковые значения, которые можно передать, я указываю типы объектов. Это верно? – EmilyNeedsToCode

+0

ну да, потому что ваш контроллер вызывает '@ upload.update (upload_params)' (так передавая параметры, которые вы отправляете, в метод обновления). Нет, вы не указываете типы пользователей, вы указываете ключи params. – sevenseacat

+0

Итак, ошибка исчезла, но поле user_id в моем «uploads» db не обновляется. Есть ли что-то еще «волшебное» в Rails, преобразующем мой параметр «user_id»? – EmilyNeedsToCode

0

Похоже, ваши параметры запроса имеют параметр "загрузить" устанавливается в «13 ", а не хеш.

+0

Ah - Я отправляю этот запрос через AJAX. Правильно ли загружен формат хеш-файла [id] (обязательно), загружать [attr1], загружать [attr2]? – EmilyNeedsToCode

Смежные вопросы