Ruby on Rails-ActionController :: UrlGenerationError

时间:2018-08-01 16:00:05

标签: ruby-on-rails ruby

我正在Ruby on Rails 5.2上开发一个项目,在这条路线中它告诉我我有一个错误,并且找不到指定的路线。但是当检查时,路线是否存在,或者至少我认为是。

这是我的路线。rb:

resources :checkin do
   post :get_barcode, on: :collection
end

checkin_controller.rb:

class CheckinController < ApplicationController
def index
    @checkin = CheckIn.all
end

def show
end

def new
    @checkin = CheckIn.new
    @checkin.upc = params[:upc]
end

def edit
end

def update
end

def destroy
end

def get_barcode
    @checkin = Merchant.find_or_initialize_by(upc: params[:upc])
    unless @checkin.new_record?
        redirect_to @checkin
    else
        redirect_to new_product_path(upc: params[:upc])
    end
end
end

在我看来,我的链接是

<%= link_to "Check-In", checkin_path, :class => "nav-link" %>

这是我的错误页面的图片: enter image description here

2 个答案:

答案 0 :(得分:1)

如果您在控制台中运行rake routes,则会看到路由为:

get_barcode_checkin_index POST   /checkin/get_barcode(.:format)                       checkin#get_barcode
            checkin_index GET    /checkin(.:format)                                   checkin#index
                          POST   /checkin(.:format)                                   checkin#create
              new_checkin GET    /checkin/new(.:format)                               checkin#new
             edit_checkin GET    /checkin/:id/edit(.:format)                          checkin#edit
                  checkin GET    /checkin/:id(.:format)                               checkin#show
                          PATCH  /checkin/:id(.:format)                               checkin#update
                          PUT    /checkin/:id(.:format)                               checkin#update
                          DELETE /checkin/:id(.:format)                               checkin#destroy

如您所见,checkin_path期望有一个id,您在这里没有提供它:

<%= link_to "Check-In", checkin_path, :class => "nav-link" %>                              

您的错误可能说明了缺少ID的问题,但是您没有在问题中提供该错误,因此我们无法确切看到错误内容。

顺便说一句,根据惯例,CheckinController应该是CheckinsController。您的路线可能应该是:

resources :checkins do
   post :get_barcode, on: :collection
end

答案 1 :(得分:0)

正如您在评论中说的那样,您是否希望索引页的URL?  然后代替

<%= link_to "Check-In", checkin_path, :class => "nav-link" %>`

您需要使用

<%= link_to "Check-In", checkin_index_path, :class => "nav-link" %>