#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
В моем приложении Rails 4 у меня есть несколько статических pages
данных, которые должны либо индексироваться Google, либо нет. Я использую переменную indexable
для этого, но, вероятно, есть лучший способ:
class PagesController < ApplicationController
def home
indexable = true
end
def about_us
indexable = true
end
def secret_stuff
indexable = false
end
end
Как я могу сгенерировать массив всех страниц, которые есть indexable
?
Я пытался сделать это в помощнике, но это не работает:
def indexable_pages
array = []
PagesController.instance_methods(false).each do |action|
if action.indexable == true # this won't work of course
array << action
end
end
array
end
Спасибо за любую помощь.
Комментарии:
1. Вероятно, это неправильный способ сделать это. Многие из этих действий недоступны
GET
. Как насчет чего-то похожего на то, чтоrake routes
делает? Индексируемо не само действие, а путь, который заканчивается этим действием, которых может быть много.2. @tadman: Хорошо, согласен. Но как я могу получить эти пути в массив?
3. У @anthony есть начало решения здесь. Возможно, вам захочется расширить систему маршрутизации, чтобы разрешить поддержку флагов, подобных
indexable: true
поддерживаемым.4. @tadman: Хорошо, звучит хорошо, но я ничего не могу найти на Rails
routes
и «flags». Можете ли вы указать мне на пример?5. Вам пришлось бы серьезно покопаться в системе маршрутизации Rails, исправив ее, чтобы включить параметры, которых у нее обычно нет. Это, вероятно, сильно усложняет то, что должно быть простой проблемой. Простой способ — использовать определенный стиль комментариев в вашем
routes.rb
файле, который вы можете найти и обработать с помощью утилиты script, преобразуя их в вашу карту.
Ответ №1:
Может быть, before_filter будет иметь смысл?
class PagesController < ApplicationController
before_filter :set_indexable, except: [:secret_stuff]
def home
end
def about_us
end
def secret_stuff
end
private
def set_indexable
@indexable = true
end
end
Комментарии:
1. Однако вам придется запускать каждое действие, чтобы определить, является ли оно индексируемым. Это сомнительная полезность.