rails 5 carrierwave in polymorphic association undefined method cache

时间:2017-09-29 23:03:41

标签: ruby-on-rails carrierwave hidden-field

我使用Rails 5.1和carrierwave 1.1.0。

在我的协会中,fotos属于prendas。

这是我的模特:

class Prenda < ApplicationRecord

has_many :fotos, inverse_of: :prenda, dependent: :destroy
accepts_nested_attributes_for :fotos

validates :....

end

fotos模型:

class Foto < ApplicationRecord
mount_uploader :file, FileUploader

belongs_to :prenda, inverse_of: :fotos

validates :file, presence: true, file_size: { less_than: 1.megabytes }

end

及其控制者:

class PrendasController < ApplicationController

before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]

def index

  @prendas = Prenda.all

end

def show

  @prenda = Prenda.find(params[:id])

  @fotos = @prenda.fotos.all

end

def new

  @prenda = Prenda.new

  @foto = @prenda.fotos.build

end

.........

private

    def prenda_params

      params.require(:prenda).permit(:titulo, :tipo, fotos_attributes: [:file, :file_cache])

    end

end

...

class FotosController < ApplicationController

def index

  @fotos = Foto.all

end


def show

end

def new

  @foto = Foto.new

end

..........

private

  def foto_params

    params.require(:foto).permit(:file, :file_cache)

  end

end

形式:

%= bootstrap_form_for @prenda do |f| %>
  <% if @prenda.errors.any? %>
    <%= f.alert_message "Favor correjir los errores debajo." %>
  <% end %>

  <p>
    <%= f.label :titulo, 'Titulo' %><br>
    <%= f.text_field :titulo %>
  </p>

  <p>
    <%= f.label :tipo, 'Tipo' %><br>
    <%= f.text_field :tipo %>
  </p>

  <p>
    <strong>Fotos:</strong>
    <% if @fotos %>
       <% @fotos.each do |foto| %>
        <%= image_tag foto.file.thumb.url %>
      <% end %>
    <% end %>
  </p>

  <p>
    <%= f.label :file, 'Agregar Imágen' %><br>
    <%= f.file_field :file %>
    <%= f.hidden_field :file_cache %>  
  </p>

  <p> <%= f.submit "Guardar", class: "btn btn-primary"%> </p>
<% end %>

在这种情况下,我收到错误:

Prendas#new

中的NoMethodError

显示/home/mateo/Tienda/app/views/prendas/_form.html.erb第55行:

未定义的方法`file_cache&#39;对于#Prenda:0x00000003a795b0

请帮忙!

我做错了什么?

我看到错误消息是针对父对象&#34; Prenda&#34;没有&#34;照片或文件&#34;但是,我应该如何在表格中实例化PrendasController中构建的@foto?

谢谢,马特奥。

1 个答案:

答案 0 :(得分:0)

文件是Foto模型的字段,它是通过嵌套属性提交的,所以我认为你应该使用它:

 <p>
  <%f.fields_for fotos_attributes do |foto| %>
    <%= foto.label :file, 'Agregar Imágen' %><br>
    <%= foto.file_field :file %>
    <%= foto.hidden_field :file_cache %> 
  <%end%> 
 </p>

并且无需构建@foto = @prenda.fotos.build这个。 你可以试试这个。并且错误显示在第55行,所以您可以显示第55行代码。

请跟进本教程tut-1tut-2

感谢。