2015-04-14 2 views
0

Из главы 12 Задача 4: Захват заказа.Гибкий веб-разработчик с Rails 4: откуда берется параметр @cart?

Откуда взялся параметр @cart из @ order.add_line_items_from_cart (@cart), который находится в контроллере заказов, и какие значения передаются через этот метод?

class OrdersController < ApplicationController 
    def create 
    @order = Order.new(order_params) 
    @order.add_line_items_from_cart(@cart) 
end 
class Order < ActiveRecord::Base 
    has_many :line_items, dependent: :destroy 

    def add_line_items_from_cart(cart) 
    cart.line_items.each do |item| 
     item.cart_id = nil 
     line_items << item 
    end 
    end 
end 

LineItem имеет один-ко-многим ассоциируется как Корзина и порядок. Так как LineItem имеет связь с Cart и Order, означает ли это, что он имеет доступ к переменной экземпляра в контроллере Cart и Order?

Как они в состоянии получить доступ или использовать @cart переменную экземпляра из другого контроллера, который не Корзина

Дополнительный вопрос

Какие ценности, добавленными line_items от «пункта»

def add_line_items_from_cart(cart) 
    cart.line_items.each do |item| 
     item.cart_id = nil 
     line_items << item 
    end 
    end 

Я действительно новичок в Rails, поэтому я не уверен, что даже задаю правильный вопрос.

+0

Вы проверили код формы ?? –

+0

Я предполагаю, что '@ cart' производится с использованием идентификаторов продуктов, которые хранятся в сеансе - это, вероятно, происходит с контроллером приложения (который обычно используются у других контроллеров) – Swards

+0

или, может быть, это просто файл before_action в том же файле – pazinjanka

ответ

0

Если вы выполняете поиск по всей программе для «@cart», вы наверняка найдете, где @cart определяется. Если вы не используете драгоценный камень, моя ставка заключается в том, что он определяется в вспомогательном методе в одном из ваших контроллеров. Если @cart используется несколькими контроллерами (имеет смысл, что он будет использоваться order_controller, возможно, users_controller, может быть, product_controller), возможно, стоит проверить его в application_controller.

Смежные вопросы