Проблема создания пользовательских маршрутов в Ruby on Rails 3.1 - PullRequest
1 голос
/ 12 ноября 2011

Не получается настроить пользовательский URL. Все RESTful маршруты работают нормально, но я не могу понять, как просто добавить /:unique_url к существующим маршрутам, которые я создаю в модели (простая 4-символьная случайная строка) и которая будет служить "постоянной ссылкой" для своего рода. .

routes.rb

resources :treks
match ':unique_url' => 'treks#mobile'

Контроллер

.
.
def mobile
  @trek = trek.find(params[:id])
end

Это потому, что я пытаюсь определить настраиваемое действие на существующем ресурсе? Могу ли я не создавать собственные методы на том же контроллере, что и контроллер с ресурсом?

Кстати, когда я изменяю routes.rb на match 'treks/:id/:unique_url' => treks#mobile, он работает нормально, но я просто хочу, чтобы URL был просто /:unique_url

Обновление Кажется, что find_by_[parameter] - это путь ...

Я играл в консоли, и я не могу заставить какие-либо методы выдвигаться ... Я могу, например, запустить Trek.last.fullname, но не могу запустить @trek = Trek.last ... и затем вызвать ... @trek.lastname например. Любые подсказки почему? Я думаю, что это моя проблема.

Ответы [ 3 ]

1 голос
/ 12 ноября 2011

Так есть ли в Trek поле, в котором хранится его уникальный URL-адрес? Если это так, вы должны делать что-то вроде этого:

@trek = Trek.find_by_url(params[:unique_url])
0 голосов
/ 12 ноября 2011

Хм.Я обычно делал бы что-то вроде этого:

map.connect "/:unique_url", :controller => "treks", :action => "mobile"

Тогда в этом контроллере идентификатор не будет применим ... вам нужно изменить его на что-то вроде этого:

(это если unique_url - столбец для поиска)

0 голосов
/ 12 ноября 2011
trek.find_by_unique_url( params[:unique_url] ) # should do the trick

@ pruett no, методы find_by_XXX генерируются на лету с помощью вызова Ruby's method_missing!Таким образом, вместо XXX вы можете использовать любые атрибуты, которые вы определили в модели.

Вы даже можете пойти до перечисления нескольких атрибутов, например:

find_by_name_and_unique_url( the_name, the_unigue_url)

Проверьте эти страницы:

http://guides.rubyonrails.org/active_record_querying.html

http://m.onkey.org/active-record-query-interface


, если вы получаете undefined method ... for nil:NilClass, это означает, что объект, для которого вы пытаетесь вызвать этот метод, выполняетне существует, например, ноль.

Возможно, вы просто пропустили оператор if перед этой строкой, чтобы убедиться, что объект не равен nil

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