Разработайте CanCan Роли и Профиль - PullRequest
1 голос
/ 25 февраля 2012

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

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

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

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

rails g devise User

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

rails g controller Users

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

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

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

1 Ответ

2 голосов
/ 26 февраля 2012

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

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

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

rails g controller Users

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

rails g nifty:scaffold user   

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

При этом строится правильная структура для пользовательского CRUD. Затем откройте файл config / rout.rb. Используя изящные генераторы, добавьте resources :users в начало этого файла - переместите его ниже ресурса devise и добавьте префикс пути, как описано на этой вики-странице devise , чтобы наподобие приведенного ниже кода.

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

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

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

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

Что гарантирует правильность проверки устройства.

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

LOCALHOST: 3000 / пользователей / 1 LOCALHOST: 3000 / пользователей / 2 LOCALHOST: 3000 / пользователей / 3 ... ЭСТ

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

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

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

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

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

...