У меня есть модель Subject, которая представляет древовидную структуру с родительскими дочерними узлами.
Чтобы переместить тему в другую ветвь / узел, мне нужно иметь 2 идентификатора субъекта, которые представляют значения from и to.
Я начал с помещения всей логики в контроллер, но теперь хочу повторно использовать метод копирования и хотел бы настроить его в модели.
Вот часть кода моего контроллера.
def copy
from = Subject.find(params[:from])
to = Subject.find(params[:to])
if to.is_descendant_of? from
render :json => {:error => ["Can't move branch because the target is a descendant."]}.to_json, :status => :bad_request
return
end
if to.read_only?
render :json => {:error => ["Can't copy to this branch as it is read only." ]}.to_json, :status => :bad_request
return
end
if params[:subjects] == 'copy'
subject = Subject.create(:name => from.name, :description => from.description, :parent_id => to.id)
#recursively walk the tree
copy_tree(from, subject)
else
#move the tree
if !(from.read_only or to.read_only)
to.children << from
end
end
end
Вот что я начал делать в моей модели
class Subject < ActiveRecord::Base
def self.copy(from, to, operations)
from = Subject.find(from)
to = Subject.find(to)
if to.is_descendant_of? from
#how do I add validation errors on this static method?
end
end
end
Моя первая задача - как добавить ошибки в статический метод в модели?
Iя не уверен, правильно ли я поступаю, используя статический метод или метод экземпляра.
Кто-нибудь может мне помочь с рефакторингом этого кода?