2015-12-10 2 views
0

Определено actiontransfer в контроллере transactions (Rails 4.2). Действие transfer похож на new, воспитывая форму transfer.html.erb для пользователя, чтобы заполнить и сохранить:Почему членский маршрут вызывает ActionController :: UrlGenerationError

def transfer 
    @title = t('Account Transfer') 
    @transaction = BankAccountx::Transaction.new() 
end 

В routes.rb, определяют маршрут:

resources :transactions do 
    member do 
     get :transfer 
     patch :transfer_result 
    end 
    end 

Вот спецификация:

it "should render transfer" do 
    session[:user_id] = @u.id 
    get 'transfer' 
    expect(response).to be_success 
end 

В RSpec, есть ошибка:

ActionController::UrlGenerationError: 
     No route matches {:action=>"transfer", :controller=>"bank_accountx/transactions"} 

Ниже приводится в спецификации:

routes {BankAccountx::Engine.routes} 

Если мы используем collection вместо member в routes.rb, то выше RSpec проходит. Следующий маршрут работы:

resources :transactions do 
    collection do 
     get :transfer 
     patch :transfer_result 
    end 
end 

Почему это действие член transfer требует сбора маршрута в routes.rb?

ответ

2

Способ, которым вы вызываете действие передачи, похоже, что вы не передаете ни одного идентификатора. Маршрут участника всегда работает с идентификатором (например, на конкретном элементе) и работает над несколькими объектами.

например. Такие методы, как edit, show, являются примерами методов-членов, поскольку они принимают идентификатор объекта и работают с определенным объектом. В то время как метод, подобный индексу, является примером метода сбора

+0

'transfer' как' new', создавая форму 'transfer.html.erb' для пользователя, чтобы заполнить и сохранить. Таким образом, нет идентификатора 'id', и это, вероятно, является причиной ошибки. По умолчанию 'new' обрабатывается Rails в качестве маршрута сбора? – user938363

+0

Вот интересный пост о члене и коллекции. new/create похоже на коллекционное действие: http://stackoverflow.com/questions/3028653/difference-between-collection-route-and-member-route-in-ruby-on-rails – user938363

Смежные вопросы