Разработка ролей и профиля CanCan

Я пытаюсь создать страницы профиля для моего сайта сообщества. Я следил за видеоуроками и читал документы на github как для Devise gem, так и для CanCan gem. Я установил и в настоящее время имею функционирующую систему аутентификации благодаря этим двум драгоценным камням и учебным пособиям на railscasts.

Я очень новичок в рубине и рельсах, поэтому все по-прежнему очень буквально. Мой первый вопрос касается строки кода на wiki странице CanCan.

<!-- in users/_form.html.erb -->
<%= f.collection_select :role, User::ROLES, :to_s, :humanize %>

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

rails g devise User

Могу ли я также запустить:

rails g controller Users

Я видел этот вопрос здесь но не совсем понял ответ. Получу ли я ошибку, создав контроллер «Пользователи» для обработки вещей, которые я хотел бы сделать?

Я сгенерировал представления разработки, но не вижу никаких контроллеров - я понимаю, что они могут быть перезаписаны - хотя я не совсем понимаю, как это будет работать. Если я перезапишу, будут ли работать все функции контроллера по умолчанию плюс перезаписанный контроллер?

Если я смогу сгенерировать контроллер «Пользователи», я предполагаю, что могу просто поместить шаблон представления в это место для всей информации о представлении профиля. Я прошу прощения за количество вопросов и длину этого поста, но я думаю, что с небольшой помощью я мог бы снова начать работать. Спасибо за любую предоставленную информацию.


person Thomas    schedule 24.02.2012    source источник


Ответы (1)


Итак, я решил это! Я опубликую свое решение для всех, у кого есть похожий вопрос, который потенциально может принести пользу.

Один из моих вопросов был:

Могу ли я также запустить:

rails g controller Users

Да, это то, что я сделал. Я использую генераторы hifty scaffold для создания представлений, поэтому эта команда на самом деле будет выглядеть следующим образом

rails g nifty:scaffold user   

Важно отметить, что я НЕ передавал никаких переменных после user. Devise уже создал таблицу Users в базе данных. Это создаст конфликт. Rails думает, что вы хотели бы перезаписать исходную базу данных, чего вы делать не хотите.

Это создаст правильную структуру для User CRUD. Затем откройте файл config/routes.rb. Используя отличные генераторы, добавьте resources :users в начало этого файла — переместите его ниже ресурса разработки и префикс пути, как описано на эта вики-страница разработки, похожая на приведенный ниже код.

devise_for :users, :path_prefix => 'd'
resources :users

Это очень важно для устранения любых конфликтов с вашим пользовательским контроллером и путями URL-адресов контроллеров разработки, добавив префикс «/d/» ко всем контроллерам разработки.

А также добавьте следующий код в метод обновления users_controller:

if params[:user][:password].blank?
  params[:user].delete(:password)
  params[:user].delete(:password_confirmation)
end

Что гарантирует, что разработка будет правильно проверена.

Теперь самое интересное — зарегистрируйте пользователя, если вы еще этого не сделали. Теперь у вас есть страница профиля этого пользователя, расположенная по адресу:

локальный: 3000/пользователи/1 локальный: 3000/пользователи/2 локальный: 3000/пользователи/3 ... и т. д.

Вы можете отредактировать страницу пользователя show.html.erb в папке представлений, чтобы изменить информацию, которая будет отображаться на странице профиля каждого пользователя.

Что касается моего вопроса о Ролях:

<!-- in users/_form.html.erb -->
<%= f.collection_select :role, User::ROLES, :to_s, :humanize %>

Теперь у вас есть доступ к этому в пользовательских контроллерах, созданных генератором nifty-scaffold, поэтому вы можете добавить этот код в свою форму, если вы также следовали методам Райана Бейтса для интеграции ролей CanCan, как описано здесь.

Надеюсь, это поможет кому-то еще.

person Thomas    schedule 26.02.2012