acts_as_nested_set
çatal kullanan bir modelim var ve modeli kaydetmek ve düğümü bir işlemde kümeye taşımak için modele bir yöntem ekledim. Bu yöntem, doğru veya yanlış döndüren hareketin geçerli olduğundan emin olmak için bir doğrulama yöntemini çağırır. Doğrulama başarısız olursa, kaydetme yöntemimin işlemi geri almak için ActiveRecord::Rollback
'u yükseltmesini istiyorum, ancak aynı zamanda arayan kişiye yanlış geri dönmesini istiyorum. Ben başarısız olacak bir durumda tasarruf çağırdığınızda, işlem geri alınır, AncakActiveRecord :: Rollback istisnası nasıl yükseltilir ve bir değer birlikte mi döndürülür?
class Category < ActiveRecord::Base
acts_as_nested_set :dependent => :destroy, :scope => :journal
def save_with_place_in_set(parent_id)
Category.transaction do
return false if !save_without_place_in_set
if !validate_move parent_id
raise ActiveRecord::Rollback and return false
else
place_in_nested_set parent_id
return true
end
end
end
alias_method_chain :save, :place_in_set
def validate_move(parent_id)
# return true or false if the move is valid
# ...
end
def place_in_nested_set(parent_id)
# place the node in the correct place in the set
# ...
end
end
ancak işlev nil
döndürür::
Benim modelim şöyle Çünkü
>> c = Category.new(:name => "test")
=> #<Category id: nil, name: "test" parent_id: nil, lft: nil, rgt: nil>
>> c.save_with_place_in_set 47
=> nil
>> c.errors.full_messages
=> ["The specified parent is invalid"]
+1, esasen aynı sonuca vardım. –
TEŞEKKÜR EDERİZ! Rails 3.2.8'de hala geçerlidir. İşlemin bitiminden sonra ActiveRecord :: Rollback'in yükselmesini [belge] 'den (http://api.rubyonrails.org/classes/ActiveRecord/Rollback.html) bana açıklayamadım. Rollback'in program akışını hiç kesintiye uğratmadığı gibi, sadece düşüyormuş gibi görünüyordu. –