Rails + Devise + Добавить пользователя - PullRequest
2 голосов
/ 29 августа 2011

У меня проблема с входом в приложение Rails через Devise.

У меня есть пользователь devis для входа в систему, и я создаю нового пользователя scaffold для управления пользователем.

мои маршруты. Rb похожи на:

devise :users
resources :users

Проблема в том, что когда я добавляю нового пользователя, когда я вошел в систему с существующим пользователем, данные не сохраняются в БД.

если я добавлю нового пользователя, когда выйду из системы, он будет добавлен в БД.

чтобы добавить нового пользователя, я использую эту ссылку: new_user_path. Так что это означает, что он использует ресурсы пользователей

my users_controller

def new
    @user = User.new
end

def create
 @user = User.new(params[:user])
 if @user.save
  redirect_to users_url, :notice => "User created."
 else
   render :action => 'new'
 end

end

в моем application_controller я добавил эту функцию

def after_sign_in_path_for(resource)
company_id = resource.company_id
@company = Company.find(company_id)
puts @company.subdomain
root_url(:host => @company.subdomain + "." + request.domain + '/companies/' + @company.id.to_s)
end

когда я добавляю пользователей, когда я вошел в систему, у меня есть это в журнале сервера

Processing by Devise::RegistrationsController#create as HTML
 Parameters: {"commit"=>"Create User", "authenticity_token"=>"6p7qqcu3x8WAJ7eWdtwJLeJQV1lj9IXtomtzxUpTx3k=", "utf8"=>"✓", "user"=>{"usersubtype_id"=>"", "username"=>"3423", "last_name"=>"", "company_id"=>"1", "password"=>"[FILTERED]", "email"=>"foo@bar.com", "first_name"=>"", "usertype_id"=>""}}
User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1

Я не знаю, почему это работает, когда я не вошел в систему, но не когда я вошел в систему.

Спасибо за ваши идеи.

РЕДАКТИРОВАТЬ: Я проверил на devise: регистрируется в моей модели пользователя. вот что у меня есть в моей модели.

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

 belongs_to :company
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :first_name, :last_name, :phone, :owner, :usertype_id, :usersubtype_id, :company_id

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Это происходит потому, что оба ваших маршрута указывают на одно и то же место.В этом случае оба указателя указывают на Devise::RegistrationsController от Devise.

Что вам нужно сделать, это просто сказать в ваших маршрутах, что вы хотите направить ваши леса пользователей на определенный контроллер.

Перейдите в консоль и введите rake routes и посмотрите, как они показывают вам, а затем измените ваши маршруты на:

devise :users
resources :users, :controller => "users"

и введите снова rake routes и увидите разницу между ними.

Дайте мне знать, помогло ли это вам.

0 голосов
/ 30 августа 2011

Если использование формы разработки по умолчанию было единственной проблемой для вас, вы должны были сгенерировать разработки с помощью

'rails generate devise:views'

и затем найдите форму внутри, просмотрите / devise / registrations / new.html.erb и отредактируйте его.

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

Scaffold создает контроллер, модель, а также миграцию. Вам нужны две базы данных для управления пользователями?

0 голосов
/ 29 августа 2011

Вы звоните devise(:registerable) в вашей модели пользователя? Если это так, вы можете использовать new_user_registration_path вместо new_user_path. Я не уверен, решит ли это вашу проблему, но это может быть шагом в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...