2017-12-10 22 views
0

2つのモデルがあります。製品とバリエーション。バリエーションフォームは製品フォームにネストされています。私はアップロードを処理するためにShrine添付ファイルを使用しています。私のバリエーションモデルには名前と写真フィールドがあります。写真のフィールドが私の製品モデルの一部だったとき、それは素晴らしい仕事でした。アップロードしたり、プレビューしたり、削除したりすることができました。それをネストされた部分に移動するので、私は写真のフィールドにすべての種類のundefined methodsを取得しています。しかしテストとして、私は自分のネストされた部分のすべてを削除し、file_field <%= f.file_field :photo_one %>とファイルをアップロードしてデータベースに保存しただけなので、部分アソシエーションが正しく設定されていることが分かりました。Rails 5ネストされたフォーム画像アップロード、キャッシュ、表示

_form_html.erb

... 

<h4>Variations</h4> 
<div class="row"> 
    <%= f.fields_for :variations do |variation| %> 
    <%= render 'variation_fields', :f => variation %> 
    <% end %> 
</div> 

<div class="row"> 
    <div class="col-md-4"> 
     <%= link_to_add_association 'add variation', f, :variations, :class => "btn btn--sm" %> 
    </div> 
</div> 

<div class="row"> 
    <div class="col-md-4"> 
     <%= submit_tag 'Submit', class: 'btn btn--sm' %> 
    </div> 
</div> 
... 

_variation_field.html.erb

<div class="nested-fields"> 
    <div class="row"> 
     <div class="col-md-6"> 
      <div class="col-md-6"> 
       <%= f.label :name, 'Name' %> 
       <%= f.text_field :name %> 
      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-4"> 
      <%= f.label :photo_one, 'Photo One' %> 
      <% if :photo_one.present? %> 
       <div class="product-image"> 
        <%= image_tag(@product.photo_one_url(:thumb)) %> 
        <div class="input-checkbox input-checkbox--switch"> 
         <input name="product[remove_photo_one]" type="hidden" value="0"> 
         <input id="checkbox-switch" type="checkbox" name="product[remove_photo_one]"> 
         <label for="checkbox-switch"></label> 
        </div> 
        <span>Remove Image</span> 
       </div> 
      <% end %> 
      <%= f.hidden_field :photo_one, value: @product.cached_photo_one_data %> 
      <%= f.file_field :photo_one %> 
     </div> 
    </div> 
</div> 

モデルproduct.rb

class Product < ApplicationRecord 
    include ImageUploader[:spec_sheet] 

    has_many :categories 
    has_many :variations, dependent: :destroy 
    accepts_nested_attributes_for :variations, allow_destroy: true 
    accepts_nested_attributes_for :categories, allow_destroy: true 

モデルvariation.rb

class Variation < ApplicationRecord 
    include ImageUploader[:photo_one] 

    belongs_to :product 
end 

products_controller.rb

... 
def product_params 
    params.require(:product).permit(
     ... 
     variations_attributes: [ 
     :id, 
     :name, 
     :position, 
     :photo_one, 
     :remove_photo_one, 
     :_destroy 
     ], 
) 
end 

enter image description here

答えて

0
  1. あなたはproducts#actionでインスタンス化@productですか?

    def action 
        @product = Product.new(product_params) 
    end 
    
  2. はあなたの部分_variation_field.html.erb

    <%= image_tag(product.photo_one_url(:thumb)) %> 
    

アップデートで、その後partial

<%= render 'variation_fields', locals: { f: variation, product: @product %> 

にローカル変数として@productを渡し

コンソールおよびテスト神社で行く

# no file is attached 
photo.image #=> nil 

# the assigned file is cached to temporary storage and written to `image_data` column 
photo.image = File.open("waterfall.jpg") 
photo.image  #=> #<Shrine::UploadedFile @data={...}> 
photo.image_url #=> "/uploads/cache/0sdfllasfi842.jpg" 
photo.image_data #=> '{"id":"0sdfllasfi842.jpg","storage":"cache","metadata":{...}}' 

# the cached file is promoted to permanent storage and saved to `image_data` column 
photo.save 
photo.image  #=> #<Shrine::UploadedFile @data={...}> 
photo.image_url #=> "/uploads/store/l02kladf8jlda.jpg" 
photo.image_data #=> '{"id":"l02kladf8jlda.jpg","storage":"store","metadata":{...}}' 

# the attached file is deleted with the record 
photo.destroy 
photo.image.exists? #=> false 

shrineドキュメントを読んで、あなたのコンソール内のメソッドをテストします。ここでそれらを実行すると、その機能を構築できます。また、読んでdocumentation

+0

私はまだ ':0x007fe5d5d95ba8>のための'未定義のローカル変数またはメソッド製品のエラーが表示されますか? @ product' –

+0

@StudioRooster '#:0x007fe5d5d95ba8>'は 'product'クラスですか?ですから問題はあなたの '.photo_one_url(:thumb)'メソッドです。必ず神社を正しく設定してください。更新された投稿を読んでください。 –

+0

私の投稿@StudioRoosterを更新しました。私はもうこのポストには従いません..申し訳ありません。あなたのアプリで幸運 –

関連する問題