0
親子ノードを持つツリービューを表すSubjectモデルがあります。レールの静的モデル検証
サブジェクトを別のブランチ/ノードに移動するには、値との関係を表す2つのサブジェクトIDが必要です。
私はすべてのロジックをコントローラに入れて始めましたが、コピーメソッドを再利用したいので、モデルに設定します。
ここに私のコントローラコードの一部があります。ここで
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
私は私のモデルで始めたものです私の最初の懸念は、モデルの静的メソッドにエラーを追加する方法ですか?
静的メソッドまたはインスタンスメソッドを使用して正しい方法を実行するかどうかはわかりません。
このコードをリファクタリングするのに役立つ人は誰ですか?
ありがとう、私は3番目のオプションのようなものを使用して終了しました。私はエラーの有無にかかわらず 'to'のインスタンスを返します。 – Tim
これは 'static'メソッドではなく' instance'メソッドの良い候補です。 –