0

Когда форма отправлена, она передает эти параметры.Ruby on Rails передает переменные формы контроллеру

Parameters: 

{"utf8"=>"✓", 
"_method"=>"copyfile", 
"authenticity_token"=>"yM2v0dJysGuw7zRIhuhY7xHMywuDRjfBqzpJc0/LCqE=", 
"redocument"=>{"odocument_id"=>"14"}, 
"commit"=>"Update Redocument", 
"method"=>"copyfile", 
"id"=>"66"} 

Я хотел бы сослаться на odocument_id в параметрах, передаваемых в контроллере.

В моем контроллере у меня есть этот

def copyfile 
    @oldfile = Redocument.find(params[:id]) 
    @newfile = Redocument.find(params[:id]).dup 

    @newfile.odocument_id = params[:odocument_id] 
    if @newfile.save! 
     dupfile(@oldfile.redocument.to_s, @newfile.redocument.to_s) 
     flash[:notice] = 'Record was successfully cloned.' 
    else 
     flash[:notice] = 'Record ERROR: Item can\'t be cloned.' 
    end 

    redirect_to(:back) 
    end 

Я его успешное создание файла в новой папке ID. Тем не менее, я категоризую свою структуру каталогов, такую ​​как odocument_id/redocument_id /. Я не могу заставить odocument_id обновляться до вызова дубликата функции для создания папок и копий. Когда я вижу загрузку @newfile в MySQL, она создает значение NULL.

ответ

1

У вас нет доступа к параметру odocument_id правильно. Как вы можете видеть в полученных параметрах "redocument"=>{"odocument_id"=>"14"}, «odocument_id» находится в параметре «redocument». Так что вам нужно сделать это следующим образом:

@newfile.odocument_id = params[:redocument][:odocument_id] 

Вы делали params[:odocument_id], не существует, поэтому вы получаете нулевое значение.

Кроме того, вы можете просто сделать

@newfile = @oldfile.dup 

и не нужно, чтобы найти файл снова.

+0

Спасибо Dipil. Это сработало. Раньше у меня была эта «точная» линия, но у меня был тип-о. Иногда я делаю излишние вызовы, например, обращаясь к @newfile, чтобы заставить все работать в моей голове. – kobaltz

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