Moje pytanie jest podobne do Build vs new in Rails 3.Buduj i nowy w Railsach 4
W Railsach 3 mogłem zbudować obiekt w widoku, aby sprawdzić autoryzację za pomocą Cancan.
<% if can? :create, @question.answers.new %>
# Code...
<% end %>
W szyn 3, różnica między .new
i .build
, że .build
dodano świeżo utworzony przedmiotu do zbierania rodzica, który z kolei spowodowało dodatkową zapisu w widoku, co oczywiście nie zawsze jest pożądany.
W obu Railsach oba dodają obiekt do kolekcji, renderując pusty rekord w widoku.
Czy ktoś ma jakieś porady, jak rozwiązać ten problem? Sprawdzenie, czy rekord jest w widoku .persisted?
, byłoby opcją, ale wydaje mi się, że nie powinienem tego robić.
Edit: W celu wyjaśnienia, model CanCan wygląda następująco:
can :manage, Answer do |answer|
user.belongables.include?(answer.question.try(:belongable))
end
z tego powodu, że nie można po prostu sprawdzić przez klasę. Właściwa instancja jest rzeczywiście potrzebna do porównania na podstawie relacji.
Co powiesz na "jeśli można? : create, Odpowiedz' jako obiekt do rzucania? (Wygląda na to, że możesz przekazać lekcję tutaj: https://github.com/ryanb/cancan/wiki/Checking-Abilities#checking-with-class) – GSP