私の質問はBuild vs new in Rails 3 に似ています。
Rails 3 では、ビューにオブジェクトを作成して、cancan を介して承認を確認することができました。
<% if can? :create, @question.answers.new %>
# Code...
<% end %>
.new
Rails 3 では、との違いは.build
、.build
新しく構築されたオブジェクトを親のコレクションに追加したことでした。これにより、ビューにレコードが追加されましたが、これは明らかに望ましくありませんでした。
ただし、Rails 4 では、どちらもオブジェクトをコレクションに追加し、ビューに空のレコードをレンダリングします。
これを解決する方法について誰かアドバイスはありますか?レコードが.persisted?
ビューにあるかどうかを確認することはオプションですが、どうにかしてそうする必要はないと感じています。
編集:明確にするために、CanCan モデルは次のようになります。
can :manage, Answer do |answer|
user.belongables.include?(answer.question.try(:belongable))
end
このため、クラスごとにチェックすることはできません。関係に基づいて比較するには、実際のインスタンスが実際に必要です。