2016-07-26 16 views
11

Formu göndermeye çalışırken, aşağıdaki hata oluştu: Validation failed: Images imageable must exist ve aynı new.html.erb görünümü.Hata: Doğrulama başarısız: Görüntülerin görüntülenebilir olması gerekir, raylar-5.0, ataç-5

i new.html.erb yılında file field yorum yaparsanız. Ürün başarıyla oluşturuluyor.

ProductsController:


def new 
    @product = Product.new 
end 

def create 
    @product = Product.create!(product_params) 

    if @product.save 
     redirect_to products_path, notice: "Product Created Successfully" 
    else 
     render "new" 
    end 
end 
def product_params 
     params.require(:product).permit(:name, :quantity, :price, images_attributes: [:id, :photo, :_destroy]) 
end 

new.html.erb:


<%= nested_form_for @product, html: { multipart: true } do |f|%> 

    <h2>New</h2> 

    <P> <%= f.label :name %> <%= f.text_field :name %> </P> 
    <P> <%= f.label :quantity %> <%= f.text_field :quantity %> </P> 
    <P> <%= f.label :price %> <%= f.text_field :price %> </P> 
    <%= f.fields_for :images do |p| %> 
    <p> <%= p.label :photo %> <%= p.file_field :photo %> </p> 
    <%= p.link_to_remove "Remove Image" %> 
    <% end %> 
    <%= f.link_to_add "Add Image", :images %> 

    <%= f.submit "Add Product" %> 
<% end %> 

20160725102038_add_image_columns_to_imageable.rb:


class AddImageColumnsToImageable < ActiveRecord::Migration[5.0] 

    def up 
    add_attachment :images, :photo 
    end 

    def down 
    remove_attachment :images, :photo 
    end 

end 

Modeli: product.rb


class Product < ApplicationRecord 
    has_one :variant 
    has_many :images, as: :imageable, dependent: :destroy 

    accepts_nested_attributes_for :images, allow_destroy: true 
end 

Modeli: image.rb


class Image < ApplicationRecord 
    belongs_to :imageable, polymorphic: true 

    has_attached_file :photo, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" 
    validates_attachment :photo, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

end 

cevap

24

Raylarda 5, belongs_to, ilişkili modelin mevcut olması gerektiğinden emin olur. E.g Bu polimorfik ilişkide, Görüntü modelinde belongs_to :imageable ve Ürün modelinde has_many :images vardır. new.html.erb Burada bir resim oluşturuyoruz, ancak ilgili ürün mevcut değil, bu yüzden Image imageable must exist hatası. Görüntü modelinde belong_to bir ilişki yaparken

Çözüm


optional: true ekleyin.

Görüntü Modeli şimdi benziyor:

class Image < ApplicationRecord 
    belongs_to :imageable, polymorphic: true, optional: true 

    has_attached_file :photo, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" 
    validates_attachment :photo, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

end 
İlgili konular