Мысли относительно идентификаторов моделей в маршрутах и ​​валидации рельсов - PullRequest
1 голос
/ 26 марта 2011

Я новичок в RoR и начал работать над типичной ассоциацией has_many (т. Е. У пользователя много друзей).У меня все работает правильно, но мне не нравится, когда идентификаторы отображаются в URL.Я считаю, что мне нужно добавить дополнительную проверку в моем контроллере, чтобы удостовериться, что идентификаторы представляют действительные ассоциации в случае, если пользователь вручную ввел разные идентификаторы.

Лично я хотел бы видеть идентификаторы вне URL и передавать черезнекоторые другие средства, но это не всегда возможно.Малая вложенность ресурсов поможет сократить количество идентификаторов, которые мне нужны для проверки как минимум.

Какова философия RoR в этом отношении?Я не видел ничего конкретного по этому вопросу.

Спасибо

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Мой подход к этому заключается в реализации правильной авторизации. Если пользователь запрашивает информацию для объекта, который ему не разрешено читать, это должно обрабатываться средой авторизации. С помощью CanCan или Декларативная авторизация вы можете определять правила, которые заменяют ваши "ручные" (и подверженные ошибкам) ​​проверки в контроллерах.

Мне нравятся идентификаторы в URL. Вот что такое REST. Получение информации для конкретных ресурсов, которые должны быть идентифицированы с помощью идентификатора.

Вы можете использовать Friendly ID , чтобы заменить целочисленный идентификатор на slug (например, users / tollbooth вместо users / 42).

1 голос
/ 24 февраля 2012

в основном для маршрутов по умолчанию используется id в качестве ключа для генерации URL.Если вы не являетесь поклонником URL-адресов на основе идентификатора, вы всегда можете переопределить URL-адреса, используя to_param внутри модели.

def to_param
  # make sure this field is always present & unique   
  username 
end

, тогда по умолчанию вы увидите username вместо id внутри URL-адресов

Как найти объект внутри действий контроллера

User.find_by_username (params [: id])

Если вы не хотите делать это вручную, используйтеслизняковых драгоценных камней, таких как friendly id

1 голос
/ 26 марта 2011

URL имеет параметры, если это URL-адрес GET.

Попробуйте использовать параметры POST, что означает, что ваш URL больше не будет загроможден. Обратите внимание, что злонамеренный пользователь все еще может отправить готовый запрос POST, используя curl.

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