Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 简单单模型奇异资源路由问题_Ruby On Rails_Session_Controller_Routes - Fatal编程技术网

Ruby on rails 简单单模型奇异资源路由问题

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 我的路由文件只有一行

我有一个精简的购物车应用程序,目前有一个模型“购物车”,购物车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
我的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 %>