Reputation: 540
Connecting users
and companies
uses accepts_nested_attributes_for
. When you add a user and save, the company information is not saved. Does anyone have any idea what could be the problem? Thanks in advance.
user.rb
class User < ActiveRecord::Base
before_create :create_role
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :role_ids, :company_attributes
has_one :company, :autosave => true
accepts_nested_attributes_for :company
has_and_belongs_to_many :roles
def role?(role_name)
return !!self.roles.find_by_name(role_name)
end
def with_company
self.company.build
self
end
private
def create_role
self.roles << Role.find_by_name(:user)
end
end
sign-up pages new.html.haml
%div{:style => "margin:10px"}
%h2= t('devise.shared.links.sign_up')
%br
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :class => 'form-horizontal'}) do |f|
= devise_error_messages!
= f.fields_for :companies do |company_form|
.control-group
= company_form.label :name, :class => 'control-label'
.controls
= company_form.text_field :name
.control-group
...
.control-group
= f.label :email, :class => 'control-label'
.controls
= f.text_field :email
.control-group
= f.label :password, :class => 'control-label'
.controls
= f.text_field :password
.control-group
= f.label :password_confirmation, :class => 'control-label'
.controls
= f.text_field :password_confirmation
.actions
= f.submit t("Save"), :class => 'btn btn-primary'
%br
%br
= render "links"
companies controller: https://gist.github.com/3863405
$rails --version
Rails 3.2.2
$ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
Upvotes: 1
Views: 1359
Reputation: 6574
add :company_attributes to attr_accessible in ur user model
add in User model
def build_company(params = {})
self.company = Company.new(params)
end
def company_attributes=(attributes)
self.company = Company.new(attributes)
end
Upvotes: 0
Reputation: 17647
It looks like you are getting stopped up by mass-assignment protection, despite having attr_accessible :company_attributes
in your model...
Relevant log output:
WARNING: Can't mass-assign protected attributes: companies
Is that a direct copy/paste from your code, or is it possibly misspelled, or something, in the real code?
Upvotes: 1