La mia domanda è simile a Build vs new in Rails 3.Build vs new in Rails 4
In Rails 3, è possibile creare un oggetto nella vista per verificare l'autorizzazione tramite cancan.
<% if can? :create, @question.answers.new %>
# Code...
<% end %>
In Rails 3, la differenza tra .new
e .build
era che .build
aggiunto l'oggetto appena costruito per la raccolta del genitore, che poi comportato una registrazione aggiuntiva nella visualizzazione, che ovviamente non si desiderava.
In Rails 4, tuttavia, entrambi aggiungono l'oggetto alla raccolta, rendendo un record vuoto nella vista.
Qualcuno ha qualche consiglio su come risolvere questo? Verificare se un record è .persisted?
nella vista sarebbe un'opzione ma in qualche modo sento che non dovrei farlo.
Edit: Per chiarire, il modello CanCan assomiglia a questo:
can :manage, Answer do |answer|
user.belongables.include?(answer.question.try(:belongable))
end
A causa di questo, non posso solo controllare per classe. Un'istanza reale è effettivamente necessaria per confrontare in base alla relazione.
E se fosse possibile? : create, Answer' come un oggetto throw-away? (Sembra che tu possa passare la lezione da qui: https://github.com/ryanb/cancan/wiki/Controllo-Abilità-chiamando-con-classica) – GSP