Как я могу сделать так, чтобы мои URL выглядели как www.example.com/1/product/date/price? - PullRequest
0 голосов
/ 25 января 2012

У меня есть две модели:

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

Есть ли способ, которым я могу это сделать?


rout.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

Ответы [ 3 ]

1 голос
/ 25 января 2012

Если вы просто хотите исправить свой метод to_param, удалите parameterize (как предложено @yoavmatchulsky). Если возможно, что id, name, purchase_date или price могут содержать символы, которые не допускаются в URL, сделайте следующее:

require 'uri'

class Price < ActiveRecord::Base
  def to_param
    URI.encode("/#{id}/#{product.name}/#{purchase_date}/#{price}")
  end
end
1 голос
/ 25 января 2012

Райан Бейтс имеет хороший скринкаст на Красивые URL с FriendlyId . FriendlyId Gem поможет вам поддерживать и создавать дружественные URL

1 голос
/ 25 января 2012

Это может сделать это:

# in routes.rb

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

Вы можете изменить все, что вам нужно, или добавить других (отправьте, положите ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...