Ссылка на путь только в том случае, если маршрут существует с Rails.application.routes.url_helpers - PullRequest
0 голосов
/ 06 июля 2018

Я строю частичную таблицу *, используя собственный класс «Таблица» с соответствующими подклассами), который будет генерировать таблицы для нескольких моделей моего приложения. Я пытаюсь создать ссылку на строку таблицы на страницу показа, но поскольку не все модели имеют страницу показа, связь должна быть условной.

Я нашел этот вопрос но, к сожалению, предложенные ответы, похоже, не работают для меня.

Здесь соответствующий код:

%tbody
  - @table.rows.each do |row|
    %tr
      -row.attributes.each do |cell|
        %td.clickable-cell
          = link_to cell, polymorphic_url(row.object) 

Когда я добавил условие if Rails.application.routes.url_helpers.method_defined?(polymorphic_url(row.object)) или if Rails.application.routes.url_helpers.respond_to?(polymorphic_url(row.object)), ссылка не создается вообще, ни для страниц с показом, ни без показа.

Если условие не применено, и для моделей без отображаемой страницы нажимается ссылка, я получаю Routing Error No route matches.

Любые идеи о том, что я могу делать неправильно и как это исправить?

1 Ответ

0 голосов
/ 06 июля 2018

Любые идеи о том, что я могу делать не так

Да, конечно. method_defined? и respond_to? принимают имя метода (например, :user_path), а не URL (http://example.com/users/1).

и как это исправить?

Вы можете попробовать что-то вроде этого:

if Rails.application.routes.url_helpers.respond_to?("#{object.model_name.singular_route_key}_path")

Для User это вернет user_path.

...