我正在制作一个活动列表/票务应用。一切都工作正常,直到我在控制器中更改了一行,现在我不能将同一事件两次添加到我的购物车中。我得到了"未定义的方法`save' 2:Fixnum"
Cartitem控制器
def create
event = Event.find(params[:event_id])
@cartitem = @cart.add_event(event.id)
respond_to do |format|
if @cartitem.save
format.html {redirect_to store_url}
format.json { render :show, status: :created, location: @cartitem }
else
format.html { render :new }
format.json { render json: @cartitem.errors, status: :unprocessable_entity }
end
end
端
以下是add_event方法所在的Cart模型的片段 class Cart<的ActiveRecord :: Base的 has_many:cartitems,dependent :: destroy
def add_event(event_id)
current_item = cartitems.find_by(event_id: event_id)
if current_item
current_item.quantity += 1
else
current_item = cartitems.build(event_id: event_id)
end
end
答案 0 :(得分:0)
这是因为方法总是返回执行的最后一行。
这就是为什么当你已经拥有 current_item 时,你执行的最后一个命令是current_item.quantity += 1
,它返回值2
。
你应该做的是:
def add_event(event_id)
current_item = cartitems.find_by(event_id: event_id)
if current_item
current_item.quantity += 1
else
current_item = cartitems.build(event_id: event_id)
end
current_item
end
并且一切都应该正常工作:)