【问题标题】:Link_to a path only if route exists with Rails.application.routes.url_helpers只有在 Rails.application.routes.url_helpers 存在路由时才链接到路径
【发布时间】:2018-12-14 23:13:52
【问题描述】:

我正在构建一个表部分*使用具有相应子类的自定义“表”类),它将为我的应用程序的多个模型生成表。我想要实现的是将表格行链接到显示页面,但由于并非所有模型都有显示页面,因此链接需要是有条件的。

我找到了this question,但不幸的是那里建议的答案似乎对我不起作用。

这里是相关代码:

%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

关于我可能做错了什么以及如何解决它的任何想法?

【问题讨论】:

  • @SergioTulentsev 据此:stackoverflow.com/questions/33904557/… 他们也可以进入检查路径?
  • 您可以添加条件以仅显示link_to if row.object.class.in?([Foo, Bar, Baz])
  • @JoannaGaudyn:抱歉,不明白您在该评论中的意思。你能改写一下吗?
  • 对不起@SergioTulentsev,自动更正。根据那个堆栈问题,这些方法也可用于检查路径是否存在。我想我的错误是我假设我的polymorphic_url(row.object) 相当于假设:user_path(因为它们生成相同的 html),但显然情况并非如此。
  • @JoannaGaudyn:是的,这正是你的错误。

标签: ruby-on-rails ruby routing conditional


【解决方案1】:

关于我可能做错的任何想法

是的,当然。 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

【讨论】:

  • 应该是object.class_name.underscore.downcase ?
  • @Gabbar:对,像MyVehicle这样的名字需要下划线
  • 这是一个很好的方法,但最好使用row.object.model_name.singular_route_key而不是`object.class.name.downcase'。
  • @WizardofOgz:当然,我知道 Rails 中应该有一些东西。
  • @JoannaGaudyn:啊,如果您没有show 但有update,则此检查可能会失败。这是相同的路线名称。在这一点上,我会求助于手动注释我的模型。最小实现可能如下所示:class User; HAS_SHOW_ROUTE = false; end 然后if object.class::HAS_SHOW_ROUTE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多