Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание справочника при помощи рекурсии в Mongoid 
:(
    Опции темы
13ga1ka
Дата 29.1.2015, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.12.2014

Репутация: нет
Всего: нет



Добрый день! У меня возникла проблема при создании справочника материалов, в котором должны быть категории и вложенные в них подкатегории и материалы соответственно. Имеется модель app/models/book/material/category.rb и контроллеp app/controllers/book/materials/categories_controller.rb со следующим кодом:

category.rb

Код

class Book::Material::Category
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name, type: String

  attr_accessor :pid

  embeds_many :materials, inverse_of: :category
  belongs_to :user, inverse_of: :book_material_categories
  recursively_embeds_many

  validates :name, presence: true

  def self.find_in_tree(collection, id)
    collection.each do |category|
        return category if category.id.to_s == id.to_s
        return find_in_tree(category.child_categories, id) unless category.child_categories.empty?
    end
  end
end
 

categories_controller.rb

Код

class Book::Materials::CategoriesController < ApplicationController
  add_breadcrumb 'Категории материалов', :book_materials_index_path
  before_filter :find_category, only: [:edit, :destroy, :update]
  before_filter :set_breadcrumb_new, only: [:new, :create]
  before_filter :set_breadcrumb_edit, only: [:edit, :update]

  def index
    @categories = current_user.clinic.book_material_categories
  end

  def new
    @category = Book::Material::Category.new
    @category.pid = params[:category_id] if params[:category_id].present?
  end

  def create

    @category = Book::Material::Category.new(params_book_material_category)
    @category.user_id = current_user.id
    ap @category
    pid = params[:book_material_category][:pid]
    if pid.present?
      ap @parent
      @parent = Book::Material::Category.find_in_tree(current_user.clinic.book_material_categories, pid)
      if @parent.child_categories << @category
        redirect_to book_materials_index_path
      else
        render :new
      end
    else
      if @category.save
        redirect_to book_materials_index_path
      else
        render :new
      end
    end
  end

  def edit; end

  def update
    if @category.update_attributes(params_book_material_category)
      redirect_to book_materials_index_path
    else
      render :edit
    end
  end

  def destroy
    @category.destroy
    redirect_to book_materials_index_path
  end

  private

  def params_book_material_category
    params.require(:book_material_category).permit(:name, :pid)
  end

  def find_category
    @category = Book::Material::Category.find_in_tree(current_user.clinic.book_material_categories, params[:id])
  end

  def set_breadcrumb_new
    add_breadcrumb 'Добавление', new_book_materials_category_path
  end

  def set_breadcrumb_edit
    add_breadcrumb 'Редактирование', edit_book_materials_category_path(@category)
  end
end


Прошу помочь разобраться с методом find_in_tree в модели category.rb, я склоняюсь к тому, что он работает не правильно, так как он ищет только по первому уровню, а дальше возникает ошибка при вложении подкатегорий. Я новичок в Ruby on Rails, и поэтому любая ваша помощь будет ценной для меня. 

Заранее большое спасибо)) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.