Ошибка простой формы: Mysql :: Error: Столбец 'cached_slug' - PullRequest
0 голосов
/ 02 марта 2011

Я получаю эту ошибку при отправке формы kategori:

ActiveRecord :: StatementInvalid в KategorisController # create

Mysql :: Ошибка: столбец cached_slug не может быть пустым: INSERT INTO kategoris

Вот моя форма:

<%= simple_form_for(@kategori) do |f| %>

    <%= f.input :name %>
    <%= f.button :submit %>
<% end %>

Вот мой контроллер:

 # GET /kategoris/new.xml
  def new
    @kategori = Kategori.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @kategori }
    end
  end

  # GET /kategoris/1/edit
  def edit
    @kategori = Kategori.find(params[:id])
  end

  # POST /kategoris

  # POST /kategoris.xml
  def create
    @kategori = Kategori.new(params[:kategori])

    respond_to do |format|
      if @kategori.save
        format.html { redirect_to(@kategori, :notice => 'Kategori was successfully created.') }
        format.xml  { render :xml => @kategori, :status => :created, :location => @kategori }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @kategori.errors, :status => :unprocessable_entity }
      end
    end
  end

А мне переименовать ID в friendly_id?

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Кажется, что столбец cached_slug в базе данных не обнуляется на самом уровне базы данных. Итак, ошибка происходит. Вы можете избавиться от этого, используя код Тадмана.

0 голосов
/ 02 марта 2011

Похоже, вам нужно заполнить поле cached_slug в вашей модели, прежде чем оно может быть сохранено. Обычно вы можете использовать такой шаблон:

class Kategori < ActiveRecord::Base
  before_save :assign_cached_slug, :unless => :cached_slug?

protected
  def assign_cached_slug
    self.cached_slug = self.title.gsub(/\s+/, '_').gsub(/[^\w\-]/, '')
  end
end

Вы можете использовать любую систему slugification , которая вам нужна. Тот, что приведен здесь, является лишь примером.

...