У меня есть такой маршрут:
match '/:url' => 'subjects#show'
В моем контроллере Subjects я использую
@subject = Subject.where("url = ?", params[:url].downcase).first
вместо
@ subject = Subject.find (params [: id])
и это прекрасно работает. Проблема в том, что ни одна из моих работ по проверке для предметной модели.
validates :url, :uniqueness => true
Эта проверка выше не работает, и я получаю это, но только когда URL уже существует:
SQL (0.5ms) BEGIN
Subject Load (0.3ms) SELECT `subjects`.`id` FROM `subjects` WHERE (`subjects`.`url` = BINARY '78') LIMIT 1
SQL (0.2ms) ROLLBACK
SQL (0.2ms) BEGIN
CACHE (0.1ms) SELECT `subjects`.`id` FROM `subjects` WHERE (`subjects`.`url` = BINARY '78') LIMIT 1
SQL (0.1ms) ROLLBACK
Меня перенаправляют на темы / шоу существующей записи, как будто все отлично. В противном случае, когда URL-адрес является уникальным, точно такой же SQL-запрос не откатывается и запись создается.
Есть идеи, как мне решить эту проблему? Это связано с моими пользовательскими предметными маршрутами? Я вырываю волосы. Вот остальные мои маршруты:
match '/auth/:provider/callback' => 'authentications#create'
match '/about' => 'pages#about'
match '/dashboard' => 'subjects#index', :as => 'user_root'
get "pages/home"
get "pages/about"
resources :authentications
devise_for :admins
devise_for :users, :controllers => {:registrations => 'registrations'}
resources :subjects do
member do
get 'stats'
get 'comments'
get 'qrcode'
get 'download_qrcode'
end
end
resources :traits
resources :ratings
resources :assets
match '/:url/stats' => 'subjects#stats'
match '/:url/remove' => 'subjects#remove'
match '/:url/comments' => 'subjects#comments'
match '/:url/edit' => 'subjects#edit'
match '/:url' => 'subjects#show'
root :to => "pages#home"