2009-05-21 3 views
2

Я пытаюсь создать чистые URL-адреса в рельсах. Я установил PermalinkFu, и я могу сгенерировать ссылки просто отлично. Я бы хотел сохранить ресурс RESTful. Есть ли способ, которым я могу перегружать:Есть ли способ перегрузить map.resources в рельсах?

map.resources :location 

для возврата: постоянная ссылка вместо: id?

Подобно тому, как я могу создать:

map.connect 'location/:permalink' :controller => 'location', :action => 'show' 

Примечание стороны: Что является лучшей практикой для обработки пермалинки, если они используются только для отображения вида/показать действие затем использовать: идентификатор для редактировать/уничтожить/и т.д.? И должен ли я быть связан с контроллером, используя: id вместо: permalink как имя переменной?

ответ

2

Это мой способ решить эту проблему:

использовать метод to_param в вашей модели Откуда:

def to_param 
    permalink 
end 

и в вашем routes.rb

map.resources :location 

Там не нужно добавлять правило для permalink

, то вы можете найти в контроллере, как это

@location = Location.find_by_permalink params[:id] 

Надеется, что это работает.

+0

Это именно то, что вы делаете. –

+1

Правильно, это то, что у меня есть сейчас, и я пытаюсь изменить. Это не кажется никчемным? Используя переменную params [: id], когда вы действительно проходите параметры [: permalink]? Что бы я хотел сделать, это иметь map.resources: location заполнить params [: permalink] var вместо params [: id] –

+0

Лично я думаю, что это очень незначительная проблема. –

0

Есть ли причина, по которой вы не можете переопределить метод to_param в вашей модели Location? Райан Бэйтс имеет Railscast that explains how to do this.

Если вы хотите быть пуристом, вы должны использовать постоянную ссылку для всех действий, но, несомненно, удобнее использовать числовой идентификатор для редактирования и уничтожения действий. Я думаю, это зависит от того, беспокоят ли вы люди, просматривающие HTML, и возможность видеть фактические первичные ключи ваших записей. Некоторые могут считать это дырой в безопасности.

+0

см. Комментарий выше. –

Смежные вопросы