Ответы пользователя по тегу Sinatra
  • Как загружать несколько файлов одним запросом в CarrierWave/Sinatra?

    Вы немного не понимаете, как работает Carrierwave. В будущем для решения подобных проблем имеет смысл почитать исходники используемой вами библиотеки. Метод mount_uploader :attachment добавляет в модель метод
    def attachment=(blabla)
    ...
    end


    При этом не ожидается, что blabla - это массив.

    На Вашем месте я бы связал Вашу модель связью one_to_many как то так:

    class Dcmnt
      include Mongoid::Document
      ...
      has_many :attachments
      accepts_nested_attributes_for :attachments
    end
    
    class Attachment
      include Mongoid::Document
      ...
      belongs_to :dcmnt
      mount_uploader :file, Uploader
    end


    В контроллере вместо:

    d = Dcmnt.new(
        :published   => params[:published],
        :name        => params[:name],
        :description => params[:description],
        :created_at  => Time.now
      )
      d.attachment = params[:attachments]


    сделать:

    d = Dcmnt.new(
        :published   => params[:published],
        :name        => params[:name],
        :description => params[:description],
        :attachments_attributes => params[:attachments_attributes]
        :created_at  => Time.now
      )


    Кстати, вместо :created_at => Time.now можно добавить в модель include Mongoid::Timestamps::Created

    Во вьюхе как-то так:

    %div.form-group
        %label Attachments
        %input{:type => "file", :name => "attachments_attributes[0][file]"}
        %input{:type => "file", :name => "attachments_attributes[1][file]"}
        %input{:type => "file", :name => "attachments_attributes[2][file]"}


    Прим.:
    1. Для форм желательно все же использовать хелперы
    2. Название Вашей модели слишком уж неочевидное. Рубисты этого не любят.
    Ответ написан
  • Поиск документа по значению в массиве - Mongoid/Sinatra

    get '/order/:order' do
      @clients = Client.where(order: params[:order])
      haml :index
    end
    Ответ написан
    Комментировать
  • Как передать значения input-ов в Array поле MongoDB в Sinatra с помощью Mongoid?

    Вы неправильно указали имя поля. Если Вам требуется множественный выбор, то имя поле должно заканчиваться на []:
    ...
     %input{"name" => "order[]", "value" => "burger", "type" => "checkbox"}
      %input{"name" => "order[]", "value" => "nuggets", "type" => "checkbox"}
      %input{"name" => "order[]", "value" => "mtdew", "type" => "checkbox"}
    ...


    В этом случае в params['order'] будет лежать массив, а не строка.
    Ответ написан
    Комментировать