【发布时间】: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