Поиск:

Ответ в темуСоздание новой темы Создание опроса
> acl9. Как расширить поля? 
V
    Опции темы
dEEp
Дата 30.3.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Использую acl9. Необходимо при регистрации пользователя использовать не только дефолтные поля, но и свои. 

форма содержит поля: имя, пароль, подтверждение и ящик. но я добавил ещё и тип пользователя.  Почему у меня тогда при сохранении в type - лежит null?


миграция выглядит так: 

Код

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :login, :string, :null => false
      t.column :email, :string, :null => false
      t.column :type, :string, :null => false
      t.column :crypted_password, :string, :null => false
      t.column :password_salt, :string, :null => false
      t.column :persistence_token, :string, :null => false
      t.column :single_access_token, :string, :null => false
      t.column :perishable_token, :string, :null => false

      t.column :login_count, :integer, :null => false, :default => 0
      t.column :failed_login_count, :integer, :null => false, :default => 0
      t.column :last_request_at, :timestamp
      t.column :current_login_at, :timestamp
      t.column :last_login_at, :timestamp
      t.column :current_login_ip, :string
      t.column :last_login_ip, :string

    end
  end

  def self.down
    drop_table :users
  end
end


В контроллере ничего интересного:
Код

  def create
    @user = User.new(params[:user])

    if @user.save
      flash[:notice] = "Account registered!"
      redirect_back_or_default account_url
    else
      render :action => :new
    end
  end



ну и модель:
Код

class User < ActiveRecord::Base
  acts_as_authentic
end

PM MAIL   Вверх
shine
Дата 30.3.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 2
Всего: 5



type - это волшебное название поля в таблице для Rails. Сам фреймворк использует его в своем механизме STI. Поэтому переименуй поле и полегчает. Кстати, можешь посмтореть на STI: может это именно то, что ты пытаешься реализовать.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
dEEp
Дата 30.3.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Переименование помогло. Спасибо.

Добавлено через 3 минуты
я не знаю что такое STI, то почитаю. 

а пытаюсь организовать различные типы пользователей. т.е. для разных типов пользователей разные формы регистрации
PM MAIL   Вверх
рельсовик
Дата 3.4.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.4.2010

Репутация: нет
Всего: нет



Цитата(dEEp @ 30.3.2010,  20:53)
Переименование помогло. Спасибо.

Добавлено @ 20:56
я не знаю что такое STI, то почитаю. 

а пытаюсь организовать различные типы пользователей. т.е. для разных типов пользователей разные формы регистрации

В таком случае, тебе возможно STI с type и надо, но нет ничего старшного в использовании null для обозначения "абстрактного" или "обычного" пользователя.

STI работает так: к примеру ты хочешь реализовать обычных пользователей и админов. Делаешь модель User и соответствующую миграцию с полем type, который будет nullом.

Затем есть два варианта, в завимимости от требований:

1. Пишешь все нужные методы для обычного юзера в модели User. Затем делаешь модель AdminUser < User, и дописываешь нужный функционал в эту модель. Хинт: если назовешь два метода в User и AdminUser одинакого, то метод будет исполнятся тот, что в модели юзера, на котором он исполнятся. В миграции ничего не трогаешь. А затем можно создавать новых админов путем u = AdminUser.new, или же u = User.new; u.type = AdminUser; (последний метод годится для изменений существующих юзеров). В обоих случаях админы будут сохранятся в ту же таблицу users, но с типом = AdminUser. Вот и вся магия =)

2. Оставляешь юзера абстрактным и пишешь туда только те атрибуты и методы, которые одинаковые для всех юзеров. Создаешь две модели: RegularUser и AdminUser, и пишешь везде свои методы. А дальше - как в варианте 1. Вариант 2 предпочтительней когда разных юзеров много, или же есть юзеры у которых меньше прав чем у "обычных" юзеров (GuestUser, например), поскольку безопасность всегда лучше внедрять путем давания прав по необходимости, а не лишения их.
PM MAIL   Вверх
dEEp
Дата 3.4.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



понял. спасибо. надо подумать, подходит ли мне это.

Добавлено через 1 минуту и 4 секунды
дайте пожалуйста обоим ребятам плюсы, а то я не могу, а они заслужили.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.