I'm a little stumped by this one, cause I feel like I've dodged the common errors (like mistyping the attr_accessible, or leaving it out altogether), but I'm still getting a
Can't mass-assign protected attributes: home, work
error here. I'm guessing I'm missing something, but I'm not sure what.
At any rate, in my new app, Users have one Home and one Work (which each belong to a user), and I want users to enter them on signing up. So, in my models:
user.rb
attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :home_attributes, :work_attributes
has_one :home, :work
accepts_nested_attributes_for :work, :home
has_secure_password
home.rb
attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user
validates :address, presence: true
work.rb
attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user
validates :address, presence: true
in my controller
users_controller.rb
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { redirect_to @user }
end
end
and in my form:
views/users/_form.html.haml
= form_for @user do |f|
- if @user.errors.any?
.error_explanation
%h2
= pluralize(@user.errors.count, "error")
prohibited this post from being saved:
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
= f.label :first_name
= f.text_field :first_name
= f.label :last_name
= f.text_field :last_name
= f.label :email
= f.text_field :email
= f.label :password
= f.password_field :password
= f.label :password_confirmation, "Re-Enter Password"
= f.password_field :password_confirmation
= f.fields_for :home do |builder|
= builder.label :address, "Home address"
= builder.text_field :address
%br
= f.fields_for :work do |builder|
= builder.label :address, "Work address"
= builder.text_field :address
.btn-group
= f.submit 'Sign Up!', class: "btn"