加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 覆盖Rails to_param?

发布时间:2020-12-16 19:06:35 所属栏目:百科 来源:网络整理
导读:如何让to_param方法始终提供关键字slug?我无法使用此路线: map.pike’/ auction /:auction_id / item /:id’,: controller = ‘items’,:action = ‘节目’ 早先被覆盖的to_param正在努力 “项目/ 1-绒围巾” 但是没有’auction / 123 / item / 1′ 更
如何让to_param方法始终提供关键字slug?我无法使用此路线:

map.pike’/ auction /:auction_id / item /:id’,: controller => ‘items’,:action => ‘节目’

早先被覆盖的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)

解决方法

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

从我看到的,你直接访问auction_id方法,而不是使用pike_path(拍卖,项目),使用#to_param.

此外,它可能会因拍卖/ 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读