我有两种模式:
Price :belongs_to Products
Product :has_many Prices
我创建了新的价格,并且我想让网址看起来像某种方式,所以在我的Price
模型中我放了:
def to_param
"#{id}/#{product.name}/#{purchase_date}/#{price}".parameterize
end
但是,这给了我一个像:
这样的网址http://localhost:3000/prices/8-turkey-bacon-2012-01-16-2-58
理想情况下,我希望它是:
http://localhost:3000/8/turkey-bacon/2012-01-16/$2.58
我有办法做到这一点吗?
routes.rb - 仅限价格
resources :prices do
get ":id/:product_name/:purchase_date/:price" => "prices#show"
get :autocomplete_product_name, :on => :collection
post :create_multiple, :on => :collection
end
答案 0 :(得分:1)
这可以做到:
# in routes.rb
get ":id/:product_name/:purchase_date/:price" => "controller#action"
您可以根据需要更改get或添加其他内容(post,put ...)
答案 1 :(得分:1)
如果您只想修复to_param
方法,请删除parameterize
(如@yoavmatchulsky建议的那样)。如果id
,name
,purchase_date
或price
可能包含网址中不允许的字符,请执行以下操作:
require 'uri'
class Price < ActiveRecord::Base
def to_param
URI.encode("/#{id}/#{product.name}/#{purchase_date}/#{price}")
end
end
答案 2 :(得分:1)
Ryan Bates在Pretty URLs with FriendlyId上有一个很好的截屏视频。 FriendlyId Gem将帮助您维护和生成友好URL