2014-01-11 2 views
0

Я использую Rails 4.0.1 с Ruby 2.0.0. У меня простая функциональность категорий. Каждая категория может принадлежать другой или быть корневой категорией (без родителя). Но если выбрать пустое («Нет») значение из выбора, категория не может быть сохранена. Где моя ошибка?Пустое значение не может быть сохранено, если оно выбрано в поле выбора. (Gem Ancestry)

category.rb

class Category < ActiveRecord::Base 

    has_many :items 
    has_ancestry 

    validates :name, presence: true, length: { minimum: 3 } 
    mount_uploader :icon, IconUploader 

end 

categories_controller.rb

def create 
    @category = Category.new(category_params) 
    if @category.save 
    redirect_to admin_categories_path, notice: "Category was successfully created!" 
    else 
    render action: "new" 
    end 
end 

_form.html.slim

= form_for [:admin, @category] do |f| 
    = f.label :name 
    = f.text_field :name 

    = f.label :ancestry 
    = f.select :ancestry, Category.all.map {|p| [ p.name, p.id ] }, include_blank: 'None' 

    = f.label :icon 
    = f.file_field :icon 

    = f.submit nil 

журнала транзакций

Started POST "/admin/categories" for 127.0.0.1 at 2014-01-11 12:18:35 +0600 
Processing by Admin::CategoriesController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"aZS2bO2HEy65cf2jQmm5BTy1VS/1Na1LBN4mHR3FYy4=", "category"=>{"name"=>"Example", "ancestry"=>""}, "button"=>""} 
(0.1ms) begin transaction 
(0.1ms) rollback transaction 

ответ

1

Я просто столкнулся с той же проблемой. Вместо того, чтобы пытаться установить поле предков на вашей модели, вместо этого используйте parent_id.

Таким образом, в вашей форме, используйте:

= f.label :parent_id 
= f.select :parent_id, Category.all.map {|p| [ p.name, p.id ] }, include_blank: 'None' 

Затем в контроллере, редактировать category_params функцию, чтобы разрешить атрибут быть назначены:

def category_params 
    params.require(:category).permit(:name, :parent_id) 
end 
1

Для категорий корней атрибут ancestry должен быть nil, а не пустая строка, поэтому вы не можете сохранить категорию.

+0

Но как сделать это «Рельсы» путь? Есть ли какие-нибудь помощники вида для автоматического преобразования пустой строки в нуль? –

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