我有一个'交易'模型,控制器和视图,我用rails生成。现在我需要向我的应用程序添加一个/ transactions / history的自定义路由,由控制器def历史记录处理:... end和render history.html.erb
所以在我的routes.rb中添加了这一行:
get '/transactions/history', to: 'transactions#history', as: 'transactions_history'
这在我的transactions_controller.rb中:
def history
@transactions = Transaction.all
end
并在transactions-> views
中创建了history.htmk.erb调用rake路线时我也看到这一行:
transactions_history GET /transactions/history(.:format) transactions#history
但是当我在浏览器中请求localhost:3000 / transactions / history时,它会给我以下错误:
Couldn't find Transaction with 'id'=history
(因为我的控制器中有这一行)
before_action :set_transaction, only: [:show, :edit, :update, :destroy])
我也在日志中看到这一行:
Request info
Request parameters
{"controller"=>"transactions", "action"=>"show", "id"=>"history"}
我的完整路线: routes.rb 我的完整错误: error logs 为什么要拨打' show'我的交易控制器中的操作?
答案 0 :(得分:4)
在routes.rb
中,rails scaffold生成器应添加resources :transactions
。这将为您生成7条路线,其中一条为/transactions/:id
,与TransactionsController
中的展示操作相对应。
Rails按照routes.rb
中定义的顺序匹配路由,并将调用第一个匹配路由的控制器操作。
我猜测你在get '/transactions/history', to: 'transactions#history', as: 'transactions_history'
以下resources :transactions
定义了/transactions/history
。当您传递show
时,这是:id
与history
resources :transactions
匹配的resources
行动。
要解决此问题,有两种解决方案:
首先,将您的自定义路线移到resources :transactions do
collection do
get :history
end
end
之上。
或者扩展NSMutableArray
声明并删除自定义路由,如下所示:
NSMutableArray *yourArray = [@[ [@[] mutableCopy]] mutableCopy];
// add an object to the end of your array
[yourArray[section][row] addObject:@(22)];
// set/change an NSNumber object at a particular location in the 2D array.
yourArray[section][row] = @(22);
// Retrieve a value, converting the NSNumber back to a NSInteger
NSInteger result = [yourArray[section][row] integerValue];
答案 1 :(得分:1)
这是因为您的路由与默认资源路由冲突,特别是GET transactions/:id
。
resources :transactions do
get :history, on: :collection
end
http://guides.rubyonrails.org/routing.html#adding-collection-routes
您也可以尝试:
/transactions/history
尝试/transaction_history
或其他。