这实际上是一个两部分的问题
为了记录 - 我正在使用Simple_form,Carrierwave和awesome_nested_fields宝石。
在我的应用程序中,我有活动,每个活动都有一个发言者,每个发言者都有一张照片。图片不是单独的表格,而是存储在“发言人”
下event.rb
class Event < ActiveRecord::Base
belongs_to :type
...
has_many :speakers
accepts_nested_attributes_for :speakers, allow_destroy: true
...
speaker.rb
class Speaker < ActiveRecord::Base
belongs_to :event
mount_uploader :photo, PhotoUploader
end
强参数(事件控制器):
private
def event_params
params.require(:event).permit(:title, :description, :type_id, :price, :program,
:start_date, :end_date, :image, category_ids: [],
speakers_attributes: [ :id, :name, :photo, :status, :description, :url, '_destroy'])
end
照片上传和更换没问题,但是在编辑时,问题就开始了:
编辑表格:
<%= simple_form_for @event, html: {multipart: true} do |f| %>
<%= f.other_stuff %>
<%= f.nested_fields_for :speakers do |f| %>
#Problem 1 - deleting uploaded images
<%= f.check_box :remove_avatar %> # DOES NOT WORK
<%= f.check_box :_destroy %> # DOES NOT WORK
Problem 2 - showing an uploaded image
<%= image_tag(@event.speaker.photo_url) if @event.speaker.photo? %> # Error - undefined method `photo?'
<% end %>
<% end %>
我很确定第一个问题与强参数有关,我尝试了很多变化,但到目前为止我无法找出正确的参数(:photo_remove,[photos_attributes ['_ destroy']]等)
显示上传图像的第二个问题可以通过插入
来解决 <%= image_tag @event.speakers[0].photo %>
在我的代码中,但是如果有几个扬声器,我需要更改数组整数,我似乎无法弄清楚如何做到这一点(尝试编写一个辅助方法,但到目前为止没什么好处)。
任何帮助将不胜感激,谢谢