gpt4 book ai didi

ruby-on-rails - 覆盖 Rails to_param?

转载 作者:行者123 更新时间:2023-12-04 07:48:05 27 4
gpt4 key购买 nike

如何让 to_param 方法始终提供关键字 slug?我很难让它与这条路线一起工作:

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

早些时候被覆盖的 to_param 正在为

'items/1-羊绒围巾'

但失败了 'auction/123/item/1'
更新:

我不确定语法是否正确[(编辑:它是正确的:它可以工作:-)],或者甚至是高效的......但是使用haml,我发现以下代码可以生成所需的链接('auction/:auction_id/item/: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(auction, item)那会使用 #to_param .

此外,它可能会失败 auction/123/item/1因为你没有改变你的 Controller 。

我认为描述如何获得有效的蛞蝓会很有帮助。

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

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

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

假设您有 slug,一个字符串字段,并且想要 slugize 您的标题。

您还需要调整您的 Controller :
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

然后,您可以在 View 中以这种方式生成路由:
link_to @action, @action

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

关于ruby-on-rails - 覆盖 Rails to_param?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com