2011-12-15 1 views
0

Я использую Devise для аутентификации с двумя добавленными полями: :organization_id и :username. Я также создал эшафот для Организации, который просто состоит из имени.Создавать «организацию» автоматически, когда пользователь подписывается?

В настоящее время, когда пользователи регистрируются, они могут вводить идентификатор организации (целое число) и имя пользователя (строка).

belong_to организаций и организаций has_many пользователей.

Вот что мои модели выглядят как (я оставил все остальное нетронутым для файлов внутри приложения/Views/изобрести/регистрации, чтобы добавить organization_id и имя пользователя, за исключением):

# user.rb

class User < ActiveRecord::Base 
    belongs_to :organization 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :organization_id, :username 

end 

# organization.rb

class Organization < ActiveRecord::Base 
    has_many :users 
end 

Я бы хотел, чтобы организация создавалась автоматически, когда пользователь подписывается без указания пользователем Organization_id.

Кроме того, в идеале @organization.name бы точно так же, как :username

Как бы я идти об этом?

Я видел Railscast на nested model forms, но он создает вопрос внутри формы опроса, и вопросы относятся к опросу. Мне нужно сделать это наоборот (создать организацию внутри пользовательской формы, где пользователи принадлежат к опросу.)

Любая помощь и предложения будут высоко оценены ..

ответ

1
class User < ActiveRecord::Base 
    before_create :create_organization 

    private 
    def create_organization 
    self.organization = Organization.create :name => self.username 
    end 
end 

create_organization метод будет выполняться непосредственно перед запросом sql, который создает пользователя. Он создаст новую организацию и назначит ее пользователю.

+0

Будь, здорово, что сработало !!! Вы не представляете, как я стою, чтобы увидеть это. Есть ли способ сделать это так: username = @ organization.name? – cdotfeli

+0

Вы имеете в виду, что я редактировал juste? –

+0

Хмм, к сожалению, это не работает - название организации по-прежнему отображается пустым, когда я регистрирую новую учетную запись .. Спасибо в любом случае! Посмотрим, смогу ли я это понять. – cdotfeli

Смежные вопросы