Я пытаюсь переместить то, что называется / категории, в /digital-catalog.
У меня все перенаправлено, и оно работает, однако происходит сбой при вводе имени url_name, когда его нет.
Я в значительной степени новичок с троичным оператором, но похоже, что он терпит неудачу.
Код не работает по следующему адресу:
- custom_search_path = action_name == 'show' ? category_path(@category.url_name) : digital_catalog_path
.search-cont
= form_tag custom_search_path, id: 'search-filter', method: :get do
= search_field_tag :search_input, params[:search_input], placeholder: 'Search', class: 'form-control'
- if params[:search_input]
= link_to 'x', custom_search_path, class: 'add-on'
= submit_tag 'go'
Точное сообщение об ошибке:
NoMethodError в категориях # show
неопределенный метод `url_name 'для nil: NilClass
Мой КатегорииКонтроллер выглядит так:
class CategoriesController < ApplicationController
respond_to :html, :json
before_action :load_category, only: [:show]
before_action :require_user
def index
@categories = Category.ordered.search(params[:search_input]).paginate(page: params[:page])
respond_with @categories
end
def show
if @category.nil?
redirect_to '/'
else
@items = @items.search(params[:search_input]).paginate(page: params[:page])
@response = { category: @category, items: @items }
respond_with @response
end
end
private
def load_category
@category = Category.find_by!(url_name: params[:id])
@items = @category.items
add_breadcrumb 'categories', digital_catalog_path
add_breadcrumb @category.name
end
end
Как мне поступить, когда кто-то входит в URL, который здесь не совпадает?
Вместо этого я попытался добавить помощника:
def route_category
if action_name == 'show'
redirect_to digital_catalog_path(@category.url_name)
else
redirect_to root_path
end
end
Который заканчивается неопределенным методом `redirect_to 'и, честно говоря, не решает проблему с тегом формы, получающим правильные данные.
EDIT:
Я также пытался получить то же сообщение об ошибке:
def show
if @category.url_name.nil?
redirect_to root_path
else
@items = @items.search(params[:search_input]).paginate(page: params[:page])
@response = { category: @category, items: @items }
respond_with @response
end
end
Так как мне обработать URL, которого нет?
РЕДАКТИРОВАТЬ: я добавил полностью в CategoriesController. Наряду с обновлением метода show, который, как я думал, будет обрабатывать ошибку, но это не так.