我想扩展与名为Product
的模型内容相关联的网址,目前,我可以转到products/ID
查看特定产品。
我想扩展产品网址,使其包含更多描述性信息,例如产品名称。
我之前被建议调整to_param
函数(在Product.rb中),如下所示:
def to_param
"#{id}-#{product_name.parameterize}"
end
但是,目前这不起作用。当您将鼠标悬停在其上/单击它时,与每个产品关联的网址会正确显示,但找不到匹配的产品。我收到错误no match for ID=ID-specific-product-name
如果我访问/products/id
,我仍然可以成功查看特定项目
有人可以指导我如何生成包含产品名称(:product_name
)的较长网址吗?
修改
我的控制器中的show
控制器操作是:
def show
@uniqueturbo = Uniqueturbo.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @uniqueturbo }
end
end
答案 0 :(得分:1)
如果您正在尝试制作一些SEO友好网址
http://www.yourdomain.com/products/123123-My-Little-PonyBook
我认为最简单的方法是改变路线,比如
获取'/ products /:title /:id'=> “产品#秀”
然后你会得到seo友好的网址:
http://www.yourdomain.com/products/My-Little-PonyBook/123123
要生成此网址,请创建帮助
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