【问题标题】:rails 5 carrierwave in polymorphic association undefined method cache多态关联未定义方法缓存中的rails 5carrierwave
【发布时间】:2017-09-29 23:03:41
【问题描述】:

我使用的是 Rails 5.1 和carrierwave 1.1.0。

在我的联想中,照片属于 prendas。

这是我的模型:

class Prenda < ApplicationRecord

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

validates :....

end

照片模型:

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 中的 NoMethodError#new

显示 /home/mateo/Tienda/app/views/prendas/_form.html.erb 提出第 55 行的位置:

#Prenda:0x00000003a795b0 的未定义方法“file_cache”

请帮忙!

我做错了什么?

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

谢谢,马特奥。

【问题讨论】:

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


    【解决方案1】:

    文件是 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

    谢谢。

    【讨论】:

    • 感谢 Anand 的解释和教程。这解决了我的问题。
    • 我的第 55 行是: 它属于该块:


    • 我现在有另一个问题。捆绑更新后,我无法为轨道加注星标。我收到错误消息: .... => Booting Puma => Rails 5.1.4 application started in development => Run rails server -h 获取更多启动选项 Exiting /var/lib/gems/2.4.0/gems/carrierwave -1.2.0/lib/carrierwave.rb:45:in block in &lt;class:Railtie&gt;': undefined method include?'对于 :es:Symbol (NoMethodError) 我认为这与我的西班牙国际化 (:es:Symbol) 有关。直到现在还可以。如果我不能很快解决它,我可能会在这里打开另一个问题。谢谢阿南德(不是 Vishy?(Viswanathan)
    • 如果这个问题是在包更新之后出现的,那么你可以检查 gemfile.lock 文件。` git checkout Gemfile.lock`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多