Определено action
transfer
в контроллере 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
?
'transfer' как' new', создавая форму 'transfer.html.erb' для пользователя, чтобы заполнить и сохранить. Таким образом, нет идентификатора 'id', и это, вероятно, является причиной ошибки. По умолчанию 'new' обрабатывается Rails в качестве маршрута сбора? – user938363
Вот интересный пост о члене и коллекции. new/create похоже на коллекционное действие: http://stackoverflow.com/questions/3028653/difference-between-collection-route-and-member-route-in-ruby-on-rails – user938363