2015-11-09 2 views
1

Я использую gem вложенную форму https://github.com/ryanb/nested_form, чтобы создать квартиру с несколькими изображениями. Плоская модель имеет много фотографий. форма выглядит следующим образом:Вложенная форма отображает неизвестную ошибку атрибута

<%= simple_nested_form_for @flat do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :name %> 
    <%= f.fields_for :pictures do |pictures_form| %> 
     <%= pictures_form.file_field :image %> 
     <%= pictures_form.link_to_remove ('<i class="fa fa-trash"></i>').html_safe %> 
    <% end %> 
    <%= f.link_to_add ('<i class="fa fa-plus"></i>').html_safe, :pictures %> 
    </div> 
    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

Мой контроллер создать действие:

def create 
    @flat = Flat.new(flat_params) 
    authorize @flat 
    @flat.user = current_user 
    @flat.pictures.build 

    if @flat.save 
     redirect_to flat_path(@flat), notice: 'Flat was successfully created.' 
    else 
     render :new 
    end 
    end 

и мои flat_params:

def flat_params 
     params.require(:flat).permit(:name, pictures_attributes: [:id, :image, :_destroy]) 
    end 

Я всегда получаю следующее сообщение об ошибке: неизвестный атрибут 'изображение' для изображения.

Я использовал гем скрепку для загрузки изображений Вот как моя таблица выглядит картина в моей схеме:

create_table "pictures", force: :cascade do |t| 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    t.string "image_file_name" 
    t.string "image_content_type" 
    t.integer "image_file_size" 
    t.datetime "image_updated_at" 
    t.integer "flat_id" 
    end 

В чем проблема?

ответ

0

Почему вы здание в методе create? Здесь вы сохранить только:

def new 
    @flat = Flat.new 
    @flat.pictures.build #-> pictures.build should be in the new method only 
    end 

    def create 
    @flat = Flat.new flat_params 
    @flat.user = current_user 

    authorize @flat 

    if @flat.save 
     redirect_to @flat, notice: 'Flat was successfully created.' 
    else 
     render :new 
    end 
    end 

Другие, чем выше (pictures.build), ваш код выглядит хорошо.

Другая проблема, которую вы может, состоит в том, что вы не указали ссылку на Paperclip в своей модели Picture. Вам необходимо будет иметь следующее:

#app/models/picture.rb 
class Picture < ActiveRecord::Base 
    has_attached_file :image #-> + any styling options etc 
end 

Из кода, который вы предоставили, это то, что я могу дать.

Смежные вопросы