【问题标题】:Customizing what url_for returns for a model?自定义 url_for 为模型返回的内容?
【发布时间】:2013-01-01 14:36:20
【问题描述】:

我有一个 post 模型,其中有许多 comments。现在评论链接实际上是一个类似/post/1?page=3#26的url。

我想做的是调用link_to "foobar", @comment 并让它生成正确的网址。我已经知道如何计算评论所在的页面,因此您可以假设 @comment.page_num 将返回正确的整数。

我认为这需要以某种方式自定义 polymorphic_url

如果不能轻松完成,也许我需要一个辅助函数 link_to_comment,但我希望它能够完成 link_to 可以做的所有事情,即传递块等等。

【问题讨论】:

  • 您可以通过覆盖 to_param 来做一些事情,但这仍然需要您将 post_id 传递给 link_to。这是一些信息gist.github.com/1209732
  • 我认为它比 to_param 更多,url 完全不同。我曾想过只是做一些网址重定向。

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


【解决方案1】:

所以这就是我最终要做的。它非常简单,但正是我需要的。我最初的范围可能过于雄心勃勃。 保持简单愚蠢的经典案例。

module CommentsHelper

  def comment_page_url(comment)
    post_url(comment.post, page: comment.page_num, anchor: comment.id)
  end

end

【讨论】:

    【解决方案2】:

    我认为这样的事情会起作用:

    link_to "foobar", @post, href: "#{url_for(@post)}?page=#{@comment.page_num}"
    

    这是假设 page_num 返回 3#26 的假设,我对此不是非常有信心,但我认为您可以从那里弄清楚。

    还有一条要考虑的评论。 page_num 真的是Comment 类的重要属性吗?在我看来,这是一个格式问题,可能属于辅助函数而不是Model。只是想一想。

    希望对你有帮助。

    【讨论】:

    • 为什么不将页面作为参数传递?此外,我已经非常了解如何执行此操作,我希望覆盖某些内容,以便 url_for(@comment) 生成 url 而无需传递其他任何内容。
    • 我把 page_num 放在模型上,因为那是 kaminari 放置它们的地方。我认为因为分页可以用于更多,而不仅仅是在视图中显示。
    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多