2012-01-25 49 views
0

我有两个型号:如何让我的网址看起来像www.example.com/1/product/date/price?

Price :belongs_to Products 
Product :has_many Prices 

我创造了新的价格,我想使URL看起来一定的方式,所以在我Price模式,我把:

def to_param 
    "#{id}/#{product.name}/#{purchase_date}/#{price}".parameterize 
end 

但是,这给了我一个URL,如:

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

尝试没有了'parameterize' – yoavmatchulsky

+0

@yoavmatchulsky这只是抛出一个路由错误,当我打的索引页来查看所有价格。 – LearningRoR

回答

1

如果您只是想修复to_param方法,请删除parameterize(如建议的@yoavmatchulsky)。如果有可能,idnamepurchase_date,或price可能含有未在URL中不允许的字符,这样做:

require 'uri' 

class Price < ActiveRecord::Base 
    def to_param 
    URI.encode("/#{id}/#{product.name}/#{purchase_date}/#{price}") 
    end 
end 
+0

出于某种原因,这让我获得了'的ActionController :: RoutingError'说'不路由匹配{:动作=>“秀”,:控制器=>“价格”'。还有,如果我想让URI像我的视图一样也是'number_to_currency',那么这有可能吗? – LearningRoR

+0

请在问题中张贴您的路线。 –

+0

我发布了我的价格路线。 – LearningRoR

1

这可以做到这一点:

# in routes.rb 

get ":id/:product_name/:purchase_date/:price" => "controller#action" 

您可以更改任何你需要获取或添加其他(POST,PUT ... )

1

瑞恩·贝茨对Pretty URLs with FriendlyId良好的截屏。 FriendlyId宝石将帮助您维护和生成友好的URL

+0

我确实看了看,但在这种情况下是否有必要,因为我仍然包括'price_id'?我认为它不是。 – LearningRoR

+0

我想如果这是唯一需要友好URL的地方,请不要这样做 –

相关问题