【问题标题】:Simple one model singular resource routing problem简单的一模型奇异资源路由问题
【发布时间】: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


    【解决方案1】:

    对于单一资源,您不需要在路由中指定对象。

    所以你应该使用这个:

    <%= link_to 'Edit', edit_cart_path %>
    

    ===== 更新 =====

    我才发现你真正的问题^^"(但原文应该也是真的)

    你使用了form_for(@cart) do |f|,它产生了那条丑陋的路径

    请改成form_for(@cart, :url =&gt; cart_path) do |f|

    我也不知道为什么,不过应该没问题……

    【讨论】:

    • 这不是我真正想做的。
    • 请检查您的表单在购物车/显示视图文件中的操作 url,看看它是否奇怪...
    • 行得通!但是为什么默认的 form_for(@cart) 不起作用???我不明白。
    • 看来rails的form_for只识别资源,不识别资源。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2011-01-09
    • 2011-05-23
    • 2011-08-29
    相关资源
    最近更新 更多