#ruby-on-rails #ruby-on-rails-3 #routes
#ruby-on-rails #ruby-on-rails-3 #маршруты
Вопрос:
Я использую Rails 3, Devise и Mongoid.
Я считаю, что могу выполнить то, что мне нужно, используя RESTful Routes, но я не уверен, как это сделать. Позвольте мне объяснить, что у меня есть и что я пытаюсь сделать.
Допустим, у меня есть два контроллера — User и Simpleform.
Simpleform — это общедоступная форма (аутентификация не требуется), которая при отправке отображается в учетной записи пользователя (при входе в систему).
У меня в системе несколько пользователей, и каждый из них увидит отправленные формы, которые относятся конкретно к ним.
Итак, вопрос в том, как мне получить общедоступную форму для отправки в учетную запись конкретного пользователя?
На данный момент маршрут для заполнения новой формы выглядит следующим образом «site.com/simpleform/new «. Я думаю, что могу использовать маршруты, чтобы это выглядело следующим образом «site.com/simpleform/user_id/new «или «site.com/user_id/simpleform/new «. Думаю, любой вариант сработал бы. Теперь, когда форма отправляется от кого-то общедоступного, приложение также знает, с каким пользователем ее связать, благодаря user_id в URL.
Я думаю, что логика работает, и RESTful Routes могут это реализовать, я просто не уверен, как это сделать.
Комментарии:
1. не могли бы вы уточнить, пожалуйста. Вы говорите, что для отправки Simpleform не потребуется проверка подлинности, но вы хотите, чтобы она была связана с пользователем? Каким-то образом вы должны предоставить идентификатор пользователя, чтобы связать Simpleform с пользователем. Либо пользователь должен войти в систему, когда он / она отправляет форму (простой вложенный ресурс). Или форма должна включать поле для идентификатора пользователя (позволяющее любому связать simpleform с любым пользователем). Вы хотите потребовать, чтобы пользователь вошел в систему, прежде чем он получит доступ к SimpleForm и отправит его?
2. Или вы хотите, чтобы кто-нибудь увидел SimpleForm, а затем был вынужден войти в систему при попытке отправить форму?
3. Ни то, ни другое. Допустим, у вас есть компания A и «общественность (много людей)». У компании A есть учетная запись в моем приложении и форма, которую они хотят разместить на своем сайте. Любой желающий может заполнить форму на сайте компании А и отправить ее (аутентификация не требуется). Однако компании A необходимо войти в систему, чтобы увидеть отправленную форму. У нескольких компаний есть учетные записи в моем приложении, поэтому мне нужен способ узнать, когда отправляется общедоступная форма, к какой компании она принадлежит. Таким образом, решение состоит в том, чтобы указать идентификатор компании в URL-адресе формы. В этом есть немного больше смысла?
Ответ №1:
Каждый пользовательский ресурс имеет один связанный ресурс SimpleForm.
Итак, я бы подумал, что ваш маршрут будет похож:
resources :users do
resource :simpleform
end
И маршруты будут выглядеть как:
user_simpleform POST /users/:user_id/simpleform(.:format) {:action=>"create", :controller=>"simpleforms"}
new_user_simpleform GET /users/:user_id/simpleform/new(.:format) {:action=>"new", :controller=>"simpleforms"}
edit_user_simpleform GET /users/:user_id/simpleform/edit(.:format) {:action=>"edit", :controller=>"simpleforms"}
GET /users/:user_id/simpleform(.:format) {:action=>"show", :controller=>"simpleforms"}
PUT /users/:user_id/simpleform(.:format) {:action=>"update", :controller=>"simpleforms"}
DELETE /users/:user_id/simpleform(.:format) {:action=>"destroy", :controller=>"simpleforms"}
users GET /users(.:format) {:action=>"index", :controller=>"users"}
POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}
Комментарии:
1. Это сработало. Мне нужно выяснить некоторые разрешения для аутентификации с различными аспектами формы (редактировать, создавать, показывать и т.д.) — Но это не является частью этого вопроса. Спасибо за помощь.