Devise, create a user that belongs to company


Devise, create a user that belongs to company



I want to create a user with Devise, that have a belongs_to association.



What is missing? What needs to create a user that belongs to a company from a select list?



my form have this:


.siimple-form-field
= f.label :name, class: "siimple-label"
br
= f.text_field :name, autofocus: true, autocomplete: "email", class: "siimple-input siimple-input--fluid siimple--height-50"
.siimple-form-field
label.siimple-label
| Select an option:
= f.fields_for :company_attributes do |b|
= b.select :company, Company.all.collect{|p| [p.name, p]}, {}, class: "siimple-select siimple-select--fluid"



the form shows ok, so when i try to submit, it says:


1 error prohibited this user from being saved:

Company must exist



Also my RegistrationsController have:


def create
super
end


def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :bank])
end





I am not easy with HAML but you use fields_for which is a way of getting fields belonging to another model. I am not sure you can (easily) do that with Devise. The only fields that you should query are the fields of your Devise model. If your Devise model User is a child of Company, just ask for the company_id field which should anyway be one of your User Devise model field. (you can make it nicer by showing the name of the company instead with a select helper)
– Maxence
Jun 29 at 22:35



fields_for


company_id





(I am considering that Companies you want to add a user to already exist. If you want to create the Company and the User alltogether this is another story)
– Maxence
Jun 29 at 22:37






the company already exists, i have a select list for select the company where must belong.
– Marcos R. Guevara
Jun 30 at 8:42




3 Answers
3



I think your problem here is that the company parameters are not being permitted (which means the company gets set to nil, hence the Company must exist error).


nil


Company must exist



You have to override Devise's resource_params method to add your company_id attribute. Try putting this in your Registrations controller:


resource_params


company_id


def resource_params
params.require(:user).permit(:user_attribute_foo, :user_attribute_bar, :company_id)
end





This don't worked
– Marcos R. Guevara
Jun 29 at 16:23



I think your column name is company_id and you are using company in the form. Try by changing it and permit this parameter.





i also tried, this isn't works
– Marcos R. Guevara
Jun 29 at 19:48



Solved!



First them all, the registration controller was not overriden in the routes files, just got this:


devise_for :users, controllers: {
sessions: 'users/sessions',
# something missing no?

}



Fixed it with


devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'

}



Then, just do common things like add something like this to the controller:


def create
params[:user][:company] = Company.find(params[:user][:company_id])
super
end



And add the missing permission to configure_sign_up_params


configure_sign_up_params


def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :company_id, :company])
end






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Render GeoTiff to on browser with leaflet

How to get chrome logged in user's email id through website

using states in a react-navigation without redux