Създайте роли и профил на CanCan

Опитвам се да създам профилни страници за сайта на моята общност. Следвах видео уроци и четох документи в github както за Devise gem, така и за CanCan gem. Инсталирах и в момента имам работеща система за удостоверяване благодарение на тези две скъпоценни камъни и уроците в railscasts.

Аз съм много нов в ruby ​​и rails, така че всичко все още е много буквално. Първият ми въпрос е свързан с ред код от 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

Да, това е, което направих. Използвам генератори на nifty scaffold за генериране на изгледи, така че тази команда всъщност ще изглежда по следния начин

rails g nifty:scaffold 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

Което гарантира, че Devise ще валидира правилно.

Сега идва забавлението - регистрирайте потребител, ако още не сте го направили. Вече имате страница с профил за този потребител, намираща се на:

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 generator, така че можете да добавите този код към формуляра си, ако сте следвали и методите на Ryan Bates за интегриране на CanCan роли, както е описано тук.

Надяваме се, че това ще помогне на някой друг.

person Thomas    schedule 26.02.2012