Ruby on Rails, как мне использовать Post для передачи данных после изменений в ActiveRecord? - PullRequest
0 голосов
/ 16 марта 2012

Используя код, основанный на старом Railscast, http://railscasts.com/episodes/142-paypal-notifications, я пытался передать информацию о корзине и из разных частей сайта, проблема, кажется, со следующим кодом.

def create
@pProduct = Product.find(params[:product])
@item = Item.create!(:cart => current_cart, :product => @pProduct, :quantity => 1, :pPrice => @pProduct.pPrice)
flash[:notice] = "Successfully added #{@pProduct.pName}"
redirect_to current_cart_url 
end

И код для обработки этого ввода, найденный в контроллере приложения.

def current_cart
if session[:cart_id]
  @current_cart ||= Cart.find(session[:cart_id])
  session[:cart_id] = nil if @current_cart.purchased_at
end
if session[:cart_id].nil?
  @current_cart = Cart.create!
  session[:cart_id] = @current_cart.id
end
@current_cart
end

Произошла ошибка.

ActiveModel::MissingAttributeError in ItemsController#create 
can't write unknown attribute `cart_id'
Rails.root: /home/timewaster/Aptana Studio 3 Workspace/cs2512
Application Trace | Framework Trace | Full Trace

app/controllers/items_controller.rb:4:in `create'

Я знаю, что это, вероятно, что-то нелепоепросто, но любой вход будет приветствоваться, так как я воткнул голову в стену за последние полчаса с этим.

РЕДАКТИРОВАТЬ: В соответствии с просьбой, route.rb Я извиняюсь за то, как повсюду этоодин из них.

http://pastebin.com/gq4Ekzvn РЕДАКТИРОВАТЬ: Оказывается, я идиот, Схема проблемы отстой.

1 Ответ

0 голосов
/ 16 марта 2012
@item = Item.create!(:cart => current_cart, :product => @pProduct, :quantity => 1, :pPrice => @pProduct.pPrice)

должно читаться

@item = Item.create!(:cart_id => @current_cart.id, :product_id => @pProduct.id, :quantity => 1, :pPrice => @pProduct.pPrice)

Если у вас есть правильные ассоциации, определенные в классе модели для Item.

Более конкретно - это предполагает, что ваш Item принадлежит_в корзину.

...