2017-04-17 20 views
1

carrierwaveとactiveadmin gemを使用して複数の写真をアップロードしようとしています。しかし、問題は、私はpermit_params activeadminの宝石に写真を追加したにもかかわらず、Unpermitted parameter: photosがあるとRailsは言う。ActiveAdmin + CarrierWaveを使用した複数の写真アップロード

#app/admin/apartment_post.rb

コード:

ActiveAdmin.register ApartmentPost do 
    permit_params :title, :max_stay, :bed_configuration, :number_of_guests, 
          :rate, :features, :description, photos: [] 
    form(html: { multipart: true }) do |f| 
    f.inputs do 
     f.input :title 
     f.input :max_stay 
     f.input :bed_configuration 
     f.input :number_of_guests 
     f.input :rate 
     f.input :features 
     f.input :description 
     f.input :photos, as: :file, multiple: true 
    end 
    f.actions 
    end 
end 

#app/model/apartment_post.rb

コード:

class ApartmentPost < ApplicationRecord 
    mount_uploaders :photos, PhotoUploader 
    validates :title, :max_stay, :bed_configuration, :number_of_guests, 
      :rate, :features, :description, presence: true 
end 

schema.rb

コード:

create_table "apartment_posts", force: :cascade do |t| 
    t.integer "max_stay",   null: false 
    t.string "bed_configuration", null: false 
    t.integer "number_of_guests", null: false 
    t.float "rate",    null: false 
    t.string "features",   null: false 
    t.string "description",  null: false 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "title",    null: false 
    t.json  "photos" 
end 

photo_uploader.rbファイルcarrierwaveによって設定されたデフォルトです。

どのようなヘルプは非常にappriciated、ありがとうございます。

+0

'photos'に空の配列を使う必要はありません。代わりに、 ':photos'は既存の' permit_params'に匹敵するように追加されるべきです。 JSONフィールドの処理に関する素晴らしいブログ投稿:https://lorefnon.me/2015/03/02/dealing-with-json-fields-in-active-admin.html – jdgray

+0

しかし、carrierwaveは複数の画像をアップロードするには空の配列が必要です –

+0

文書では、空の配列をハッシュで指す必要があると書かれています。 https:// github。com/carrierwaveuploader/carrierwave –

答えて

2

ご返信ありがとうございます:)。

希望すると、これが役立ちます。

ActiveAdmin.register ApartmentPost do 
    permit_params :title, :max_stay, :bed_configuration, :number_of_guests, 
          :rate, :features, :description, { photos: [] } 

    form(html: { multipart: true }) do |f| 
    f.inputs do 
     f.input :title 
     f.input :max_stay 
     f.input :bed_configuration 
     f.input :number_of_guests 
     f.input :rate 
     f.input :features 
     f.input :description 
     f.file_field :photos, multiple: true 
    end 
    f.actions 
end 

本当にあなたは::file(2番目のパラメータ)を入力方法で複数のファイルをアップロードできますか?

私が調べるのは、2番目のパラメータにas::fileを指定すると複数の画像を入力できないことです。これは、htmlファイルタグの下に生成され、あなたはホワイトリストパラメータとして配列として写真の属性を取得しようとしています。

<input id="photos" type="file" name="apartment_post[photos]"> 

file_fieldで提供されている簡単な方法があります。 file_fieldヘルパーメソッドは、html入力ファイルタグを返します。 file_fieldで試してください。 詳細については ​​

私はこれがエラーの原因であるかどうかは確かではありませんが、理由は考えられます。

上記の変更を行った後。それでも問題が発生した場合は、作成アクションをオーバーライドするか、以下のようにパラメータをホワイトリストに追加する機能を使って、デバッガでパラメータをチェックすることができます。

permitted_pa​​rams関数は、ホワイトリストに登録されたパラメータを返します。また、許可されたパラメータも確認してください。 https://activeadmin.info/2-resource-customization.html

また、まだ問題が発生している場合はお知らせください。私はあなたを助けるために最善を尽くします:)。がんばろう。

関連する問題