代码之家  ›  专栏  ›  技术社区  ›  Fernando Aureliano

Rails 5:上传图像后出现附件错误

  •  0
  • Fernando Aureliano  · 技术社区  · 6 年前

    我在Heroku上的Rails中有一个应用程序,使用Cloudinary处理图像。为了上传这些图片,我使用 Attachinary gem 。问题是,这些图像会进入Cloudinary服务器,但不会保存在数据库中。我的表格使用 remote: true 要发送数据,控制台将返回以下内容:

    enter image description here

    Completed 406 Not Acceptable in 4978ms (ActiveRecord: 335.3ms)
    
    ActionController::UnknownFormat - PerfilController#update is missing a template for this request format and variant.
    
    
    request.formats: ["text/javascript", "application/ecmascript", "application/x-ecmascript", "*/*"]
    request.variant: []:
    

    Perfil控制器

    class PerfilController < SuperSiteController
      before_action :set_user, only: [:show, :edit, :update, :destroy]
      # skip_before_action :verify_authenticity_token #evita erro 422
      skip_before_action :verify_authenticity_token, only: [:update]
    
      def index
         @usuarios = User.all
      end
    
        def show
        @q = Page.ransack(params[:q])
      end
    
      def new
        @usuario = User.new
        @q = Page.ransack(params[:q])
      end
    
      def edit
        @q = Page.ransack(params[:q])
        @usuario = User.find(current_user.id)
      end
    
      def create
        @usuario = User.new(user_params)  
        respond_to do |format|
          if @usuario.save
    
    
            format.html { redirect_to "/#cadastro", notice: 'Usuário cadastrado com sucesso' }
            format.json { render :show, status: :created, location: @marca }
            # format.js
          else
            format.html { redirect_to "/#cadastro", notice: 'Este email já está cadastrado' }
            format.json# { render json: @usuario.errors, status: :unprocessable_entity }
          end
        end
      end
    
      def update
        respond_to do |format|
          if @usuario.update(user_params)
    
            if @usuario.nome_cartao.present? && @usuario.cartao.present? && @usuario.validade.present? &&
                @usuario.cvv.present?
    
                Iugu.api_key = "xxxxxxxxxxxxxxxxxxxxxxxxx"
    
    
    
                      charge = Iugu::Charge.create({
                        "email" => @usuario.email,
                        items: [{
                             description:  "Cadastro Cartão",
                             quantity: 1,
                             price_cents:  0
                         },{
                             description: "Desconto",
                             quantity: 1,
                             price_cents: "0"
                         }],
                          payer: {
                            # cpf_cnpj: current_user,
                            name: @usuario.nome_cartao,
                            phone: @usuario.wpp,
                            email: @usuario.email,
                            address: {
                                street: @usuario.rua,
                                # city: current_user.cidade,
                                # state: current_user.estado,
                                country: "Brasil",
                                zip_code: @usuario.cep
                            }
                          }
                        }
                      )
    
                        customer = Iugu::Customer.create(email: @usuario.email, name: @usuario.nome_cartao)
                        Iugu::Subscription.create(plan_identifier: 'cadastro_cartao', customer_id: customer.id)
    
                        puts customer.invoices
    
            end
    
    
    
            # format.html { redirect_to edit_perfil_path, notice: 'Usuário atualizado com sucesso' }
            format.html 
            format.json { render json: @usuario }
            format.js
          else
            format.html { render :edit }
            format.json { render json: @usuario.errors, status: :unprocessable_entity }
            format.js
          end
        end
      end
    
      def destroy
        @usuario.destroy
        respond_to do |format|
          format.html { redirect_to root_url, notice: 'Usuário excluído com sucesso' }
          format.json { head :no_content }
        end
      end
    
      def solicitacao
        @user = current_user
        NovaMandalaMailer.solicitacao(@user).deliver
        redirect_to edit_perfil_path(current_user.id), notice: "Obrigado! Sua solicitação foi enviada."
      end
    
    
      def enviar_email_contato
        @nome = params[:nome]
        @email = params[:email]
        @assunto = params[:assunto]
        @mensagem = params[:mensagem]
    
        ContatoMailer.enviar_email_contato(@nome, @email, @assunto, @mensagem).deliver
        redirect_to contato_path, notice: "Sua mensagem foi enviada, entraremos em contato em breve."
      end
    
    
      def confirmacao_cadastro
        @nome = current_user.name if current_user.name.present?
        @email = current_user.email 
    
        ConfirmacaoMailer.confirmacao_cadastro(@nome, @email).deliver
      end
    
    
      private
    # Use callbacks to share common setup or constraints between actions.
      def set_user
        @usuario = User.friendly.find(params[:id])
      end
    
      # Never trust parameters from the scary internet, only allow the white list through.
      def user_params
        params.require(:user).permit(:last_sign_in_ip, :last_sign_in_ip, :current_sign_in_ip, :last_sign_in_at,
                                     :current_sign_in_at, :sign_in_count, :remember_created_at, 
                                     :email, :encrypted_password, :password, :reset_password_token,
                                     :name, :wpp, :altura, :image1, :image2, :image3, :image4, :image5, 
                       :o_que_falta, :tipo_roupa, :marcas, :instagram, :nao_gosta, 
                       :cor1, :cor2, :cor3, :cor4, :cor5, :obs_stylist, :nascimento, 
                       :profissao, :cep, :rua, :numero, :complemento, :cartao, :peso,
                       :nome_cartao, :validade, :cvv, :image, :avatar, :slug,
                       corpo:[], como_quer_receber:[], cores:[], ficou_sabendo:[],
                       tamanho_cima:[], tamanho_baixo:[], photos:[], opcoes_pecas:[])
      end
    end
    

    类型

     <%= form_for @usuario, :url => url_for(:controller => 'perfil', :action => 'update'), :html => {remote: true, class: 'perfilForm' }  do |f| %>
    
    
      <section class="boxPerfil">
        <section class="row">
          <section class="column large-12 medium-12 small-12 circuloPerfil">
    
    
    
            <div class="grupo1Fotos">
              <label class="foto1 foto uploadFotos">
                <%= image_tag 'site/icons/faixa.png', class: "adesivo" %>
                <!-- <img src="https://picsum.photos/95/115" alt=""> -->
                <% if @usuario.image1? %>
                  <%= cl_image_tag(@usuario.image1.path, { size: '95x115', crop: :thumb }) %>
                <% else %>
                  <p>Cadastre uma imagem aqui</p>
                <% end %>
                <%= f.attachinary_file_field :image1 %>
              </label>
              <!-- END FOTO 1 -->
    
              <label class="foto2 foto uploadFotos">
                <%= image_tag 'site/icons/faixa.png', class: "adesivo" %>
                <!-- <img src="https://picsum.photos/138/177" alt=""> -->
                <% if @usuario.image2? %>
                  <%= cl_image_tag(@usuario.image2.path, { size: '138x177', crop: :thumb }) %>
                <% else %>
                  <p>Cadastre uma imagem aqui</p>
                <% end %>
                <%= f.attachinary_file_field :image2 %>
              </label>
              <!-- END FOTO 2 -->
            </div>
            <!-- GRUPO FOTOS -->
    
    
            <label class="foto3 foto uploadFotos">
              <%= image_tag 'site/icons/faixa.png', class: "adesivo" %>
              <% if @usuario.image3? %>
                <%= cl_image_tag(@usuario.image3.path, { size: '130x200', crop: :thumb }) %>
              <% else %>
                <p>Cadastre uma imagem aqui</p>
              <% end %>
              <%= f.attachinary_file_field :image3 %>
              <input type="file">
            </label>
            <!-- END FOTO 3 -->
    
            <label class="foto4 foto uploadFotos">
              <%= image_tag 'site/icons/faixa.png', class: "adesivo" %>
              <% if @usuario.image4? %>
                <%= cl_image_tag(@usuario.image4.path, { size: '120x160', crop: :thumb }) %>
              <% else %>
                <p>Cadastre uma imagem aqui</p>
              <% end %>
              <%= f.attachinary_file_field :image4 %>
            </label>
            <!-- END FOTO 4 -->
    
            <label class="foto5 foto uploadFotos">
              <%= image_tag 'site/icons/faixa.png', class: "adesivo" %>
              <% if @usuario.image5? %>
                <%= cl_image_tag(@usuario.image5.path, { size: '110x188', crop: :thumb }) %>
              <% else %>
                <p>Cadastre uma imagem aqui</p>
              <% end %>
              <%= f.attachinary_file_field :image5 %>
            </label>
    
    
            <section class="boxInfosUser">
              <div class="sobre">
                <h1><%= @usuario.name if @usuario.name.present? %></h1>
                <p><%= @usuario.obs_stylist if @usuario.obs_stylist.present? %></p>
              </div>
    
    
              <div class="cores coresPerfil">
                <h3>CORES:</h3>
                <% n2 = 0 %>
                <%= f.collection_check_boxes(:cores, User::CORES, :first, :last) do |b| %>
                    <%= b.label do %>
                      <% n2 +=1 %>
                      <%= b.check_box %>
                      <div class="paleta paleta<%= n2 %>">
                        <div class="cor cor1"></div>
                        <div class="cor cor2"></div>
                        <div class="cor cor3"></div>
                        <div class="cor cor4"></div>
                      </div>
                    <% end %>
                <% end %>
    
                <h3>MARCAS:</h3>
                <p><%= @usuario.marcas if @usuario.marcas.present? %></p>
              </div>
    
              <div class="informacoes">
                <h2>TAMANHO:</h2>
                <p>parte de cima: 
                  <%= 
                    if @usuario.tamanho_cima.present? 
                      @usuario.tamanho_cima.drop(1).map {|str| "\"#{str}\""}.join(', ').gsub(/"|^ +| $+|\n/i,'').to_s
                    end
                  %>
                </p>
                <p>parte de baixo:
                  <%= 
                    if @usuario.tamanho_baixo.present? 
                      @usuario.tamanho_baixo.drop(1).map {|str| "\"#{str}\""}.join(', ').gsub(/"|^ +| $+|\n/i,'').to_s
                    end
                  %>
                </p>
    
                <h2>ALTURA E PESO:</h2>
                <p><%= @usuario.altura if @usuario.altura.present? %> | <%= @usuario.peso if @usuario.peso.present? %></p>
    
                <h2>TIPO DE CORPO</h2>
                <p>
                  <%= 
                    if @usuario.corpo.present? 
                      @usuario.corpo.drop(1).map {|str| "\"#{str}\""}.join(', ').gsub(/"|^ +| $+|\n/i,'').to_s
                    end
                  %>
                </p>
    
                <!-- <h2>ESCOLHA DAS PEÇAS</h2>
                <p><%#= @usuario.tipo_peca if @usuario.tipo_peca.present? %></p> -->
              </div>
    
    
    
    
              <div class="avatar">
                <label class="foto6 foto uploadFotos">
                  <% if @usuario.avatar? %>
                    <%= cl_image_tag(@usuario.avatar.path, { size: '175x262', crop: :thumb, class: "avatar" }) %>
                  <% else %>
                    <p>Cadastre sua foto aqui</p>
                  <% end %>
                  <%= f.attachinary_file_field :avatar %>
                </label>
    
    
                <%= image_tag "site/thumbs/foto.png" %>
              </div>
    
              <div class="descricao">
                <div>
                  <p><%= @usuario.instagram if @usuario.instagram.present? %> | nascimento: <%= @usuario.nascimento if @usuario.nascimento.present? %>, <%= @usuario.profissao if @usuario.profissao.present? %></p>
                </div>
    
                <!-- <div class="formaCorpo">
                <%= image_tag "site/icons/triagulo.png" %>
                  <p>(alterar)</p>
                </div> -->
        <%#= f.submit "SALVAR FOTOS" %>
    
              </div>
            </section>
    
            </section>
          </section>
      </section>
      <!-- ================================== END BOX -->
    <% end %>
    

    以前有人已经犯过这个错误吗?

    谢谢

    0 回复  |  直到 5 年前