Ruby on rails 简单单模型奇异资源路由问题
我有一个精简的购物车应用程序,目前有一个模型“购物车”,购物车id存储在会话中 购物车控制器有这个方法,所以我们总是有一个购物车Ruby on rails 简单单模型奇异资源路由问题,ruby-on-rails,session,controller,routes,Ruby On Rails,Session,Controller,Routes,我有一个精简的购物车应用程序,目前有一个模型“购物车”,购物车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 我的路由文件只有一行
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
我的cart/show视图是这样的,我已经添加了一个表单,以便最终可以更新项目的数量,但现在我只是编辑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 %>
当我在“show”页面上更改“created_at”属性时,该属性会成功更新,但当我被重定向时,我会得到如下bizare 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
这和导致它一团糟的response_-to-block有关,我非常感谢能得到的任何帮助
感谢提供了单一资源,您无需在路由中指定对象 所以你应该用这个:
<%= link_to 'Edit', edit_cart_path %>
======已更新=====
我刚刚发现了你真正的问题^^”(但原文也应该是真的)
您使用(@cart)do | f |的表单_,这就产生了那条丑陋的路径
请更改为(@cart,:url=>cart_路径)do | f |
我也不知道为什么,但应该没问题……这并不是我想要做的。请检查购物车/显示视图文件中表单的操作url,看看是否奇怪……这是否有效!但是(@cart)的默认表单为什么不起作用???我不明白。似乎rails的表单仅用于已识别的资源,而不是资源。
<%= link_to 'Edit', edit_cart_path %>