これは実際には2つの部分からなる質問です
記録として、Simple_form、Carrierwave、awesome_nested_fields の gem を使用しています。
私のアプリにはイベントがあり、各イベントにはスピーカーがあり、各スピーカーには写真があります。写真は別のテーブルではなく、「スピーカー」の下に保存されています
event.rb
class Event < ActiveRecord::Base
belongs_to :type
...
has_many :speakers
accepts_nested_attributes_for :speakers, allow_destroy: true
...
スピーカー.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']] など)。
アップロードされた画像の表示に関する2番目の問題は、挿入することで解決できます
<%= image_tag @event.speakers[0].photo %>
ただし、私のコードでは、スピーカーが複数ある場合は、配列の整数を変更する必要があり、その方法を理解できないようです(ヘルパーメソッドを作成しようとしましたが、これまでのところ何もうまくいきません)。
助けていただければ幸いです、ありがとう