当前位置:  开发笔记 > 前端 > 正文

覆盖Rails to_param?

如何解决《覆盖Railsto_param?》经验,为你挑选了1个好方法。

如何让to_param方法始终提供关键字slug?我无法使用此路线:

map.pike'/ auction /:auction_id/item /:id',: controller =>'items',:action =>'show'

早先被覆盖的to_param正在努力

"项目/ 1-绒围巾"

但失败了 'auction/123/item/1'

更新:

我不确定语法是否正确[(编辑:它是正确的:它可以:-)],甚至是高效....但是使用haml,我发现以下代码可以生成所需的链接('拍卖/:auction_id /项目/:身份证')

- for auction in @auctions.sort{|a, b| a.scheduled_start <=> b.scheduled_start}
  -for item in @items
    - unless auction.current_auction
      ... pike_path(auction.auction_id, item)

maurycy.. 8

我不确定我是否理解你的问题.(这是凌晨3点41分)

从我看到的,你直接访问auction_id方法,而不是使用pike_path(auction, item)它的使用#to_param.

此外,它可能会auction/123/item/1因为您没有更改控制器而失败.

我认为描述如何获得工作slu is会很有帮助.

一般来说,如果覆盖#to_param,ID不再有效.这意味着,如果你使用slug,每次生成多态URL时(例如link_to object, object),它都会传递to_param的值.值得注意的是,您还必须更换控制器.

就个人而言,我认为轻松生成slug的最佳方法是使用techno-weenie的permalink_fu,添加has_permalink到模型中,然后覆盖to_param.例如

class Auction < ActiveRecord::Base
  has_permalink :title, :slug
end

假设你有一个slug,一个字符串字段,并想要重击你的标题.

您还需要调整控制器:

class AuctionsController < ApplicationController
  def show
    @auction = Auction.find_by_slug(params[:id]) || raise(ActiveRecord::RecordNotFound)

    respond_to do |format|
      format.html # show.html.erb
    end
end

然后,您可以通过以下方式在视图中生成路径:

link_to @action, @action

顺便说一下,您不应该在视图中对操作进行排序.最好的方法是使用named_scope.



1> maurycy..:

我不确定我是否理解你的问题.(这是凌晨3点41分)

从我看到的,你直接访问auction_id方法,而不是使用pike_path(auction, item)它的使用#to_param.

此外,它可能会auction/123/item/1因为您没有更改控制器而失败.

我认为描述如何获得工作slu is会很有帮助.

一般来说,如果覆盖#to_param,ID不再有效.这意味着,如果你使用slug,每次生成多态URL时(例如link_to object, object),它都会传递to_param的值.值得注意的是,您还必须更换控制器.

就个人而言,我认为轻松生成slug的最佳方法是使用techno-weenie的permalink_fu,添加has_permalink到模型中,然后覆盖to_param.例如

class Auction < ActiveRecord::Base
  has_permalink :title, :slug
end

假设你有一个slug,一个字符串字段,并想要重击你的标题.

您还需要调整控制器:

class AuctionsController < ApplicationController
  def show
    @auction = Auction.find_by_slug(params[:id]) || raise(ActiveRecord::RecordNotFound)

    respond_to do |format|
      format.html # show.html.erb
    end
end

然后,您可以通过以下方式在视图中生成路径:

link_to @action, @action

顺便说一下,您不应该在视图中对操作进行排序.最好的方法是使用named_scope.


您可以使用`find_by_slug!`,除非找到,否则会引发异常
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有