0

我想扩展与名为 的模型的内容相关联的 URL Product,目前,我可以通过转到 来查看特定产品products/ID

我想扩展产品 URL,使其包含更多描述性信息,例如产品名称。

之前有人建议我调整to_param功能(在 Product.rb 中),如下所示:

def to_param
  "#{id}-#{product_name.parameterize}"  
end

但是,这目前不起作用。当您将鼠标悬停在它上面/单击它时,与每个产品关联的 URL 会正确显示,但没有找到匹配的产品。我得到错误no match for ID=ID-specific-product-name

如果我访问/products/id,我仍然可以成功查看特定项目

谁能指导我如何生成包含产品名称 ( :product_name) 的更长 URL?

编辑

我的控制器中的show控制器动作是:

def show
@uniqueturbo = Uniqueturbo.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @uniqueturbo }
end
end
4

1 回答 1

1

如果您正在尝试制作一些 SEO 友好的网址

http://www.yourdomain.com/products/123123-My-Little-PonyBook

  • 我认为最简单的方法是改变路线,像这样

    得到'/products/:title/:id' => "products#show"

然后你会得到 seo 友好的 url,比如:

http://www.yourdomain.com/products/My-Little-PonyBook/123123

要生成此 url,请创建帮助程序

def url_for_product(product)
  "/products/#{product.title}/#{product.id}"
end
  • 另一种方法是离开正常的 RESTful 路由,并重新解析 'id' 参数,例如:

    def show
      product_id = params[:id].split('_')[0] # :-)
      # ...
    end
    

这一次你仍然需要辅助方法,比如:

def url_for_product(product)
   product_path(product) + "_#{product.title.tableize}"
end
于 2013-03-20T19:43:29.843 回答