【发布时间】:2010-09-12 01:54:32
【问题描述】:
我有一个精简的购物车应用程序,目前只有一个模型“购物车”,购物车 ID 存储在会话中。
购物车控制器有这个方法,所以我们总是有一个购物车
def initialize_cart
if session[:cart_id]
@cart = Cart.find(session[:cart_id])
else
@cart = Cart.create
session[:cart_id] = @cart.id
end
end
我的路由文件有这一行
map.resource :cart
我的购物车/显示视图看起来像这样,我添加了一个表单,以便最终我可以更新项目的数量,但现在我只是编辑 created_at 属性。
<% form_for(@cart) do |f| %>
<%= f.date_select :created_at %>
<p>
<%= f.submit 'Update' %>
</p>
<% end %>
<%= link_to 'Edit', edit_cart_path(@cart) %> |
<%= link_to 'Back', cart_path %>
最后,我的更新操作如下所示:
def update
#@cart = Cart.find(params[:id])
respond_to do |format|
if @cart.update_attributes(params[:cart])
format.html { redirect_to(cart_path) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @cart.errors, :status => :unprocessable_entity }
end
end
end
当我在“显示”页面上对“created_at”属性进行更改时,该属性已成功更新,但是当我被重定向时,我得到一个像这样的奇怪 url
http://192.168.0.10:3000/cart.%23%3Ccart:0x23d46fc%3E
我已经摆弄了更新操作,并且可以通过这样做使整个事情完美地工作
# PUT /carts/1
# PUT /carts/1.xml
def update
#@cart = Cart.find(params[:id])
#respond_to do |format|
if @cart.update_attributes(params[:cart])
redirect_to(cart_path)
# head :ok
#else
# render :action => "edit"
# render :xml => @cart.errors, :status => :unprocessable_entity }
end
#end
这与导致它搞砸的 respond_to 块有关,我非常感谢我能得到的任何帮助。
谢谢
【问题讨论】:
标签: ruby-on-rails session controller routes