2016-02-23 4 views
1

Приложение имеет BusinessSessionsController, чтобы обрабатывать логины и регистрироваться в сессиях для Businesses Контроллер и Business модель. При успешном входе в систему пользователь должен быть перенаправлен на .../businesses/4, где «4» является идентификатором соответствующего бизнеса. Вместо этого рельсы строят следующий URL: .../business.4Проблема маршрутизации на контроллере с нерегулярным плюрализацией

Я предполагаю, что это может иметь отношение к нерегулярному плюрализации слова «бизнес». Когда я запускаю тот же код для контроллера users, модель user, т. Е. Регулярная плюрализация, она работает нормально.

Я попытался установить нерегулярный инфлектор, как показано ниже, но добавление его не имело значения. http://guides.rubyonrails.org/routing.html#naming-routes раздел 4,8

config/inflections.rb 
ActiveSupport::Inflector.inflections do |inflect| 
inflect.irregular 'business', 'businesses' 
end 

Регулятор тока:

class BusinessSessionsController < ApplicationController 

def create 
    business = Business.find_by(email: params[:business_session][:email].downcase) 
    if business && business.authenticate(params[:business_session][:password]) 
    business_log_in business 
    redirect_to business 
    else 
    flash.now[:danger] = 'Invalid email/password combination' 
    redirect_to business_url 
    end 
end 

end 

Маршруты

get 'business' => 'businesses#new' #this page has the login form 
get 'business_login' => 'business_sessions#new' 
post 'business_login' => 'business_sessions#create' 
resources :businesses 

ответ

0

вы можете удалить неправильную интонацию, рельсы обрабатывает это правильно. Я создал routes.rb только с resources :business, бегом rake routes выходов:

 Prefix Verb URI Pattern     Controller#Action 
    businesses GET /businesses(.:format)   businesses#index 
       POST /businesses(.:format)   businesses#create 
new_business GET /businesses/new(.:format)  businesses#new 
edit_business GET /businesses/:id/edit(.:format) businesses#edit 
    business GET /businesses/:id(.:format)  businesses#show 
       PATCH /businesses/:id(.:format)  businesses#update 
       PUT /businesses/:id(.:format)  businesses#update 
       DELETE /businesses/:id(.:format)  businesses#destroy 

Однако вы предыдущее определение

get 'business' => 'businesses#new' #this page has the login form 

вызывает тревогу, так как это будет генерировать помощник, который также называется business_url:

Prefix Verb URI Pattern   Controller#Action 
business GET /business(.:format) businesses#new 

Разница заключается в том, что один помощник имеет идентификатор, а другой нет, из-за соглашения с рельсами, что приоритет основан на порядке создания: сначала создан -> наивысший приоритет - побеждает тот, у кого нет ID.

Если вы звоните redirect to: business, то происходит то, что вызван вспомогательный помощник business_url без идентификатора, а идентификатор бизнеса рассматривается как «формат».

TL; DR два способа решения этой проблемы:

1) railsy способ, чтобы удалить get 'business' => 'businesses#new' маршрут и использовать new_business_url помощника вместо этого. URL будет выглядеть /businesses/new

2) Вы действительно хотите, чтобы URL быть /business, то вы можете сделать некоторые хитрости:

get 'business' => 'businesses#new', as: :new_business #this page has the login form 
    resources :businesses, except: [:new] 

Это позволит получить следующие маршруты:

 Prefix Verb URI Pattern     Controller#Action 
new_business GET /business(.:format)   businesses#new 
    businesses GET /businesses(.:format)   businesses#index 
       POST /businesses(.:format)   businesses#create 
edit_business GET /businesses/:id/edit(.:format) businesses#edit 
    business GET /businesses/:id(.:format)  businesses#show 
       PATCH /businesses/:id(.:format)  businesses#update 
       PUT /businesses/:id(.:format)  businesses#update 
       DELETE /businesses/:id(.:format)  businesses#destroy 

Вы по-прежнему должны заменить свой звонок на business_urlnew_business_url, но теперь URL-адрес будет выглядеть как /business.

+0

Великие указатели. Спасибо! –

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