У меня есть корзина для покупок в моем приложении Rails. Я пытаюсь отобразить количество элементов, которые в настоящее время находятся в корзине пользователя, и обновлять их асинхронно, когда пользователь добавляет элементы. Я показываю (и обновляю) этот счетчик в том же самом действии контроллера, где вы можете создавать новые элементы корзины. Поведение как этот:Rails count vs. size записи модели при создании новой записи
В представлении
<%= link_to "#{current_user.cart_items.size} Items in Cart", cart_items_path, class: "btn btn-default" %>
В контроллере
def index
@cart_item = current_user.cart_item.new # instantiate a new cart_item to be used in a form to create a new cart_item in this index action
end
Таким образом, каждый раз, когда View загружается счетчик current_user.cart_items.size
является слишком много, так как Действие создает экземпляр нового cart_item.
Я попробовал его в консоли, чтобы проверить:
2.2.1 :022 > current_user.cart_items.size
=> 2
2.2.1 :023 > current_user.cart_items.new
=> #<CartItem id: nil, user_id: 1, product_id: nil, created_at: nil, updated_at: nil>
2.2.1 :024 > current_user.cart_items.size
=> 3
Есть ли способ не рассчитывать объект, который только создан экземпляр еще не спасен?
Примечание: Я попытался это с build
тоже на месте new
и имела тот же результат.
возможный дубликат [Определить, если ActiveRecord объект является новым или создания] (http://stackoverflow.com/questions/ 7842920/define-if-activerecord-object-is-new-or-created) –