0

これは実際には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 %>

ただし、私のコードでは、スピーカーが複数ある場合は、配列の整数を変更する必要があり、その方法を理解できないようです(ヘルパーメソッドを作成しようとしましたが、これまでのところ何もうまくいきません)。

助けていただければ幸いです、ありがとう

4

0 に答える 0