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
私はまだ ':0x007fe5d5d95ba8>のための'未定義のローカル変数またはメソッド製品のエラーが表示されますか? @ product' –
@StudioRooster '#:0x007fe5d5d95ba8>'は 'product'クラスですか?ですから問題はあなたの '.photo_one_url(:thumb)'メソッドです。必ず神社を正しく設定してください。更新された投稿を読んでください。 –
私の投稿@StudioRoosterを更新しました。私はもうこのポストには従いません..申し訳ありません。あなたのアプリで幸運 –