Ruby on Rails - 编辑多个记录、控制器和路由



我正在跟踪railscast 198http://railscasts.com/episodes/198-edit-multiple-individually,试图将其更新到rails 3,但遇到了路由错误。路线http://localhost:3000/orders/edit_individual给我一个错误:

ActiveRecord::RecordNotFound in OrdersController#show - Couldn't find Order with ID=edit_individual

我已经更新并使用了他的轨道2路由

map.resources :products, :collection => { :edit_individual => :post, :update_individual => :put }

按照发动机厂描述的轨道3公约http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/(根据我的需要更新)

  resources :orders do
    collection do
      post :edit_individual
      put :update_individual
    end
  end

以下是我尝试过的:

我已经尝试过按照答案的建议更改路由资源:向现有控制器添加操作(RubyonRails),但仍然显示相同的错误。我已经尝试删除cancan加载和授权资源、"resources:orders"路由条目以及控制器中的"show"条目,但另一个错误表明它仍在尝试显示ID为"edit_indiversial"的记录,而不是将"edit_inDiversial"视为路由。

这是我的路线和控制器,

myapp::Application.routes.draw do
      resources :products
      resources :roles
      devise_for :users #, :controllers => { :registrations => "registrations" }
    #  match 'dashboard' => 'user_dashboard#index', :as => 'user_root'
      resources :orders do
        collection do
          post :edit_individual
          put :update_individual
        end
      end
      resources :orders   

class OrdersController < ApplicationController
    load_and_authorize_resource # cancan method
      def index
      end
      def show
      end
      def edit_individual #from railscast 198
        @orders = current_user.customer_orders
      end
      def update_individual
        @orders = Order.update(params[:orders].keys, params[:orders].values).reject { |p| p.errors.empty? }
        if @orders.empty?
          flash[:notice] = "Orders updated"
          redirect_to orders_url
        else
          render :action => "edit_individual"
        end
      end # ...etc.

我已经删除了cancan方法,但它仍然是罪魁祸首吗?我已经试过了我能想到的一切,但已经穷途末路了。。有什么想法吗?

编辑:

命令提示符的输出:

Started GET "/orders/edit_individual" for 127.0.0.1 at Thu Jun 30 11:19:02 -0700
 2011
  Processing by OrdersController#show as HTML
  Parameters: {"id"=>"edit_individual"}
  ←[1m←[36mOrder Load (0.0ms)←[0m  ←[1mSELECT "orders".* FROM "orders" WHERE "or
ders"."id" = 0 LIMIT 1←[0m
Completed   in 2584ms
ActiveRecord::RecordNotFound (Couldn't find Order with ID=edit_individual):

以及我的html:中的路线

    <%= link_to 'Update Payments Received', edit_individual_orders_path %>

和耙式路线:

edit_individual_orders POST   /orders/edit_individual(.:format)         {:action=>"edit_individual", :controller=>"orders"}
 update_individual_orders PUT    /orders/update_individual(.:format)       {:action=>"update_individual", :controller=>"orders"}
                   orders GET    /orders(.:format)                         {:action=>"index", :controller=>"orders"}
                          POST   /orders(.:format)                         {:action=>"create", :controller=>"orders"}
                new_order GET    /orders/new(.:format)                     {:action=>"new", :controller=>"orders"}
               edit_order GET    /orders/:id/edit(.:format)                {:action=>"edit", :controller=>"orders"}
                    order GET    /orders/:id(.:format)                     {:action=>"show", :controller=>"orders"}
                          PUT    /orders/:id(.:format)                     {:action=>"update", :controller=>"orders"}
                          DELETE /orders/:id(.:format)                     {:action=>"destroy", :controller=>"orders"}

您可能应该运行"rake routes",看看它为"edit_indivual"操作提供了什么路由。

还有您的日志

Started GET "/orders/edit_individual" for 127.0.0.1 at Thu Jun 30 11:19:02 -0700

表示您正在调用作为get的post-action。

尝试低于

  resources :orders do
    collection do
      get :edit_individual
      put :update_individual
    end
  end

或者你可以使用

<%= link_to 'Update Payments Received', edit_individual_orders_path, :method => "post" %>

因此,错误消息:OrdersController#show-找不到ID为edit_individeal的Order,这告诉我,无论出于什么原因,您都将被路由到"show"操作,该操作本质上期望类似的内容

/orders/1

意味着它是一个成员而不是一个集合。你确定服务器输出中命中的url匹配/orders/edit_indiversial吗?

相关内容

  • 没有找到相关文章

最新更新