2015-10-09 1 views
0

Я новичок в Ruby on Rails, поэтому, пожалуйста, со мной."Параметр отсутствует или значение пуст: цвет" ошибка в контроллере

Я следил за учебным пособием на YouTube с использованием простой модели, распечатывал результаты и обновлял модель с помощью формы, а также находил и заменял то, что я пытался выполнить («текстовые файлы, учебные материалы связаны с изображениями)

все работало до тех пор, примерно в то время я просто хотел в одну страницу индекса и попытался сливаясь всю логику контроллера в индекс.

в настоящее время я получаю сообщение об ошибке чтения param is missing or the value is empty: color на params.require в ниже контроллера.

class ColorsController < ApplicationController 
    before_action :find_color, only: [:destroy] 

    def index 
     @colors = Color.all.order("created_at DESC") 

     @color = Color.new(color_params) 
    end 

    def destroy 
     @color.destroy 
    end 

    private 

    def find_color 
     @color = Color.find(params[:id]) 
    end 

    def color_params 
     params.require(:color).permit(:file) 
    end 
end 

Что я беру из этого, так это то, что он не распознает переменную экземпляра @color, но я не знаю или почему я должен исправить это.

Модель:

class Color < ActiveRecord::Base 
    has_attached_file :file 
    validates_attachment_content_type :file, :content_type => ["application/xml"] 
end 

Форма:

= simple_form_for @color do |f| 
    = f.input :file 
    = f.submit 

Объяснение того, что я делаю неправильно очень ценится.

+0

Почему страница индекса получит форму представления с любые параметры? Как вы его подаете методу индекса? –

+0

Форма частично отображается в индексе. Разве это не так? – JackHasaKeyboard

+0

Нет; посмотрите на визуализированный HTML. Rails использует соглашение; форма будет генерировать обычный путь отправки формы Rails для модели. Если вы хотите, чтобы ваше приложение работало не-Rails-y, вам нужно вручную указать контроллер/метод, который вы хотите отправить. –

ответ

0

пары отсутствуют или значение пусто: цвет

Вы должны изменить способ index к ниже

def index 
    @colors = Color.all.order("created_at DESC") 
    @color = Color.new #notice the change here 
end 

Кроме того, вы должны определить метод create, как показано ниже

def create 
    @color = Color.new(color_params) 

    respond_to do |format| 
     if @color.save 
     format.html { redirect_to @color, notice: 'Color was successfully created.' } 
     format.json { render :show, status: :created, location: @color } 
     else 
     format.html { render :new } 
     format.json { render json: @color.errors, status: :unprocessable_entity } 
     end 
    end 
end 
+0

Я бы не хотел создавать шоу или новые шаблоны. Я бы хотел сделать все в рамках индекса. – JackHasaKeyboard

+0

@JackHasaKeyboard Я понял ваше намерение, но вам нужен метод create для создания записей. – Pavan

+0

Хорошо, я отредактировал контроллер, и ошибка исчезла, но отправка формы, похоже, ничего не делает. Он перенаправляет на новый шаблон без указания ошибки JSON, и количество записей остается неизменным. Разве не должно быть что-то «шоу», связанное с контроллером? – JackHasaKeyboard