2011-07-14 5 views
2

У меня есть модель RESTful User, хорошо работающая в Rails 3. Я бы хотел добавить новый вариант для создания нового пользователя на основе информации, запрошенной на сервере LDAP.RESTful Actions Best Practices

Что я хотел бы советом, так это, как лучше всего это сделать. Вот что я придумал до сих пор, но я не знаю, соответствует ли он методам Rails:

Редактирование пути ресурса пользователя для приема и GET и POST в новое представление, называемое «import_ldap_user».

Импорт LDAP-пользователя затем представляет форму, которая использует AJAX (POSTing to import_ldap_user), чтобы позволить посетителю искать человека в LDAP. Результаты отображаются на странице, и, если это приемлемо, пользователь нажимает «Создать», который затем вызывает/user/create.

Часть почему это кажется плохо для меня:

  1. мне нужно отправить надлежащее @user к/пользователь/создать, но я не уверен, если мой AJAX вызов может произвести надлежащую @user ,
  2. Я не знаю, является ли неправильная практика добавлением нового глагола в маршрут RESTful Users.
  3. Я не знаю, является ли использование AJAX POST import_ldap_users правильным разделением проблем.

Любые идеи? У перфекционистов Rails есть мнения о том, как это должно работать?

ответ

2

Что отправляется в/user/create, это не объект @user, а его атрибуты. Возможно, что действие для создания лесов будет иметь нечто похожее на @user.new(params[:user]), которое просто вытаскивает пользовательские атрибуты, которые были опубликованы, и создает на нем новый объект.

Даже если ваш вызов AJAX не предоставляет атрибуты способом, который может быть обработан методом new, вы можете просто изменить свой create таким образом, чтобы он обрабатывал данные сообщения.

Что касается лучших практик, это определенно то, о чем я думал в прошлом, но я не знаю, есть ли «правильный» ответ. Я думаю, что наличие нового представления, в котором сообщения для метода create вполне приемлемо, вы также можете создать новый контроллер, если хотите строго следовать шаблону CRUD.

Определенно хороший вопрос, и если у кого-то есть лучший ответ, я бы хотел его услышать.