使用帮助程序方法构建动态URL

时间:2012-09-30 18:13:00

标签: ruby-on-rails ruby-on-rails-3 routes

我有一个广告模型。每个广告都属于一个区域。

为了尝试使用更易读的URL,我在routes.rb中定义了一个自定义路径:

match "/adverts/:area_id/:id" => "adverts#show", :as => :advert_semantic

这会产生类似

的东西
/adverts/manhattan/123

但是,在极少数情况下,广告可能未分配到某个区域。在这些情况下,Rails会抛出错误,并且不会呈现调用路径的页面。

我想通过检查广告是否首先分配区域来解决此问题,如果没有区域,则生成常规路径(/ adverts / 123)作为后备。

您认为最好的方法是什么?例如。是否最好构建一个可以执行上述操作的辅助方法,或者如果在同一页面上多次调用该方法,这会对性能产生影响吗?

1 个答案:

答案 0 :(得分:0)

当然,任何额外的操作都会影响性能,但如果您谨慎使用,则不应过高(并且缓存始终是一种选择。)

在这种情况下,帮助者将是我的选择。像这样......

def advert_link( advert )
  if advert.area.blank?
    link_to advert.title, advert
  else
    link_to advert.title, advert_semantic_path( advert, area_id: advert.area.id )
  end 
end

将开销保持在极小,尽管这取决于它的使用程度。