Загрузка нескольких файловых вложений Angular.js с помощью Rails

0

Я пытаюсь с помощью Angular загружать несколько файлов из формы. И проблема в том, что приложение rails только получает один файл в хеше params.

У меня есть форма для создания article и в этой article есть несколько article_attachments

В угловом файле article.js я загружаю форму следующим образом:

function(Upload, $http, $q) { 
  var article = {
    create: function(newArticleForm) {
      sendPayload(newArticleForm, 'POST', '/articles.json');
    }
  }

  sendPayload = function(formData, method, url) {
    var file_attachment, options, ref, ref1;
    file = (ref = formData.file) != null ? ref : [];
    var names = [];
    for (var i = 0; i < formData.file.length; ++i) 
      names.push(formData.file[i].name);
    options = {
      url: url,
      method: method,
      file: formData.file,
      file_form_data_name: names,
      fields: {
        article: {
          brand: formData.brand,
          price: formData.price,
          user_id: formData.user_id
        }
      }
    };
    return Upload.upload(options);
  };
  return article;
}

И console.log действительно дает, что он отправляет несколько файлов, например, следующим образом: Изображение 174551

Но проблема в стороне рельсов, в моем файле articles_controller.rb, хеш params содержит только один из файлов

def create
  @article = current_user.articles.new(article_params)
  begin
    @article.save!
    if params[:article][:file]
      params[:article][:file].each { |image| @article.article_attachments.create(url: image)}
    end
    render json: @article.to_json 
  rescue ActiveRecord::RecordInvalid => e
    render json: @article.errors ## You might want to specify a json format as well    
    return 
  end
end

private

def article_params
  params.require(:article).permit(
    :price, :brand, :model,:provider,
    :internal_memory, :color,
    :article_state, :battery_included, :user_id,
    :file
  )
end

def process_params
  params[:article] = JSON.parse(params[:article])
                             .with_indifferent_access

end

параметры запроса, которые должны содержать 2 загружаемых файла:

{
   "article" => {
      "brand" => "LG",
      "price" => 123,
    "user_id" => 2
},
      "file" => #<ActionDispatch::Http::UploadedFile:0x007fe458d5b760 @tempfile=#<Tempfile:/var/folders/ps/tt94sbxd3dz31rxvw3v1r8nw0000gn/T/RackMultipart20150913-2113-hwty51.jpg>, @original_filename="140911111141-photo-realism-sam-silva-ocelot-horizontal-large-gallery.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"140911111141-photo-realism-sam-silva-ocelot-horizontal-large-gallery.jpg\"\r\nContent-Type: image/jpeg\r\n">,
"controller" => "articles",
    "action" => "create",
    "format" => "json"
}

Так что здесь пропало?

  • 0
    что такое хэш параметров params?
  • 0
    кстати, has_one: файл? или has_many файлы?
Показать ещё 3 комментария
Теги:
restangular

1 ответ

0

Попытайтесь изменить свой article_params ниже

def article_params
  params.require(:article).permit( :price, :brand, :model,:provider, :internal_memory, :color, :article_state, :battery_included, :user_id, :file => [])
end
  • 0
    это не работает, он получает только один файл для загрузки
  • 0
    поле: [] правильно для массива с сильными параметрами
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню