REST Маршруты и переопределение: id с to_param - PullRequest
1 голос
/ 21 февраля 2012

Мой контроллер использует RESTful-маршруты по умолчанию для создания, добавления, редактирования и т. Д.

Я хочу изменить значение по умолчанию :id для использования :guuid.Итак, что я сделал:

# routes.rb
resources :posts

# Post Model
class Post < ActiveRecord::Base
    def to_param  # overridden
        guuid
    end
end

Это работает, но мой модифицированный код контроллера REST имеет что-то вроде этого

def show
  @post = Post.find_by_guuid(params[:id])
  @title = "Review"
  respond_to do |format|
    format.html # show.html.erb
  end
end

Когда я вижу этот код ..

Post.find_by_guuid(params[:id])

это может показаться неправильным, но это работает.Я не понимаю, почему я не могу написать это так:

Post.find_by_guuid(params[:guuid])

Почему мне все еще приходится передавать params[:id], когда я его не использую?
Ищетеобратная связь о том, правильный ли мой подход или что-либо еще, чтобы рассмотреть.
Даже если это работает, это не всегда означает, что это правильно.

1 Ответ

2 голосов
/ 21 февраля 2012

Введите rake routes в своей консоли и проверьте вывод маршрутов. Вы увидите фрагмент ': id' в некоторых из них, отсюда и params[:id]. Это соглашение по рельсам: когда вы используете resources в своих маршрутах, параметр называется id. Я не знаю, можете ли вы изменить его (сохраняя при этом resources; в противном случае вы могли бы просто пойти по соответствующим правилам), но в любом случае это не следует делать: даже если это кажется не очень логичным, оно действительно имеет смысл, как только вы поймете как работает рельсовая маршрутизация.

...