2015-04-16 2 views
0

У меня есть модель пользователя и модель лодки. У пользователя много лодок. Лодка принадлежит пользователю. Я удивляюсь, что, хотя я не гнездовал ресурсы, я могу создать лодку для входа в систему. Так мой url становится. .../boats.new2 (2 в качестве идентификатора пользователя), и это фактически сохраняет пользователю с идентификационным номером 2.Вложенные ресурсы необходимы? Rails

Но насколько я знаю, есть ли у меня вложенные ресурсы, это станет чем-то вроде .../user/2/boats/1. Разве не так?

Я не пробовал до #edit действия в любом случае, поэтому не уверен, какой из них использовать и их последствия, есть ли какие-либо другие преимущества, связанные с использованием любого из них, или не вложенность неправильная?

+1

Rails никогда не заставит вас гнездиться к ресурсам. Его до вас, чтобы RESTfully создать API, который отражает ресурсы, с которыми работает ваше приложение. – max

+0

Вложение ресурсов в routes.rb влияет только на их пути – IvanSelivanov

ответ

1

Маршруты для вложения не требуются в Rails. Вы можете поддерживать связь между лодками и пользователями, если у вас есть активная запись belongs_to и has_many методы, определенные в модели, а также внешние ключи в db.

В общем, вы должны вложить ресурсы, если между объектами существует очевидная взаимосвязь между объектами, такими как пользователи и сообщения (или лодки). Это просто больше понимает ваших пользователей и как структуру API.

В некоторых случаях вы можете захотеть вложить отношения в нечто другое, например название категории. Например, ваш шаблон uri может выглядеть как /sailboats/boats/1 или powerboats/boat/2. В нижней строке вы должны структурировать маршруты таким образом, чтобы это логично для пользователей и разработчиков проекта.

+0

Благодарим вас за ответ. Но в этом случае я не знаю, я не могу получить сообщения об ошибках, поэтому я, хотя это из-за нераспределения маршрутов. Модель лодок имеет model_id brand_id и year_id. и я подтвердил их, но, возможно, я должен использовать что-то вроде validates_associated? – Shalafister

+0

Я бы, вероятно, вложил маршруты в ваш случай. В контроллере судов вы можете обрабатывать назначение model_id, brand_id и т. Д. На основе того, что пользователь отправляет через параметры. Вы должны использовать validates_associated, если ассоциации необходимы для создания записи. Если они не являются обязательными, то вам это не нужно. – JeffD23

+0

Есть ли способ не вложенных маршрутов, но показывая ошибки ?. Вот вопрос. [Вопрос] (http://stackoverflow.com/questions/29683111/drop-down-list-error-message-not-shown) Спасибо заранее – Shalafister