Assuming that this is line 17:
@user.update_attributes(@user.associate_id)
You need to look at what the #update_attributes method really does.
The argument should be a hash of attribute=>value pairs.
Also, for the association has_one/belongs_to
User#id <==> Associate#user_id
There is no foreign key in the User model. It will find the Associate
with something similar to:
SELECT associates.* FROM associates WHERE associates.user_id =
#{user.id} LIMIT 1
when you do user.associate in your code.
-Rob
Rob Biedenharn http://agileconsultingllc.com
[email protected]
On May 21, 2009, at 3:16 PM, Colin Law wrote:
> I have not examined the trace in detail but I don't believe you
> should have an associate_id column in the users table. If you think
> about it, it is redundant. Rails will expect a user_id column in the
> associates table and will use that to make the connection both ways.
>
> Colin
>
> 2009/5/21 JannaB <[email protected]>
>
> I know this mst be a newbie error, but here goes: I have two classes
>
> class User < ActiveRecord::Base
> has_one :associate
> end
>
> and
>
> class Associate < ActiveRecord::Base
> belongs_to :user
> end
>
> These are one-to-one. In other words, Associate has one User and vice
> versa, and they Associate.id=User.associate_id and
> Associate.user_id=User.id
>
> I go to create a new User....I want the Associate to be created
> automatically (in fact, duplicating the username and email field, and
> putting in a start date). I want to update the User.associate_id and
> the Associate.user_id.
>
> What follows is my UsersController for doing this, which is throwing
>
> class UsersController < ApplicationController
> def new
> @user = User.new
> end
>
> def create
> @user = User.new(params[:user])
> @user.associate_id=0
> associate = Associate.new()
> [email protected]
> [email protected]
> associate.startdate=Date.today
> if @user.save
> [email protected]
> associate.save
> @user.associate_id=associate.id
> @user.update_attributes(@user.associate_id)
> flash[:notice] = "Registration successful."
> redirect_to root_url
> else
> render :action => 'new'
> end
> end
> ...
> end
>
> and here is the log that gets created:
>
> [4;36;1mSQL (0.0ms) [0m [0;1mSET SQL_AUTO_IS_NULL=0 [0m
>
>
> Processing UsersController#create (for 127.0.0.1 at 2009-05-21
> 15:00:48) [POST]
> Parameters: {"user"=>{"password_confirmation"=>"[FILTERED]",
> "password"=>"[FILTERED]", "login"=>"joey", "email"=>"[email protected]"},
> "commit"=>"Submit", "action"=>"create",
> "authenticity_token"=>"8AAkYRFmlpenJdd6ZuTd1b4G1aAiUB40pXCn9syINsw=",
> "controller"=>"users"}
> [4;35;1mUser Columns (16.0ms) [0m [0mSHOW FIELDS FROM `users`
> [0m
> [4;36;1mAssociate Columns (16.0ms) [0m [0;1mSHOW FIELDS FROM
> `associates` [0m
> [4;35;1mSQL (0.0ms) [0m [0mBEGIN [0m
> [4;36;1mUser Exists (0.0ms) [0m [0;1mSELECT `users`.id FROM
> `users` WHERE (LOWER(`users`.`email`) = BINARY '[email protected]') LIMIT 1
> [0m
> [4;35;1mUser Exists (0.0ms) [0m [0mSELECT `users`.id FROM
> `users` WHERE (LOWER(`users`.`login`) = BINARY 'joey') LIMIT 1 [0m
> [4;36;1mUser Exists (0.0ms) [0m [0;1mSELECT `users`.id FROM
> `users` WHERE (`users`.`persistence_token` = BINARY
> 'ad2f35e2ba9354a359386fd85597b4b3bfe6709172776a7bcbd01643b77b23fa5531daaa2eaa41fe81899f0c5f6f0013eb09701a2402b5305902af5a113bb0df
>
> ')
> LIMIT 1 [0m
> [4;35;1mUser Load (0.0ms) [0m [0mSELECT * FROM `users` WHERE
> (`users`.`persistence_token` =
> '84defa206a76ccc30e4b768283b4da1590f06b90ed5c8091a81aa62dfbdffcb87066135e257325259f8c37c8318da771b6aecb22dafe8c291271e9efa9f60806
>
> ')
> LIMIT 1 [0m
> [4;36;1mCACHE (0.0ms) [0m [0;1mSELECT * FROM `users` WHERE
> (`users`.`persistence_token` =
> '84defa206a76ccc30e4b768283b4da1590f06b90ed5c8091a81aa62dfbdffcb87066135e257325259f8c37c8318da771b6aecb22dafe8c291271e9efa9f60806
>
> ')
> LIMIT 1 [0m
> [4;35;1mUser Create (0.0ms) [0m [0mINSERT INTO `users`
> (`last_login_at`, `updated_at`, `last_request_at`, `crypted_password`,
> `current_login_ip`, `password_salt`, `current_login_at`,
> `persistence_token`, `login_count`, `login`, `created_at`, `email`,
> `associate_id`, `last_login_ip`) VALUES(NULL, '2009-05-21 19:00:49',
> '2009-05-21 19:00:49',
> 'cc42cb5dd198622ad51de4144a2cfed0f86ded721c9d6306f2ffebcb498395e31e131aacd66cc2b36649dffd5c028c13315a6f33ed896790ac2b7eb816328fe2
>
> ',
> '127.0.0.1', 'fkBwzEfpTdtlut7302gI', '2009-05-21 19:00:49',
> 'ad2f35e2ba9354a359386fd85597b4b3bfe6709172776a7bcbd01643b77b23fa5531daaa2eaa41fe81899f0c5f6f0013eb09701a2402b5305902af5a113bb0df
>
> ',
> 1, 'joey', '2009-05-21 19:00:49', '[email protected]', 0, NULL) [0m
> [4;36;1mSQL (0.0ms) [0m [0;1mCOMMIT [0m
> [4;35;1mSQL (0.0ms) [0m [0mBEGIN [0m
> [4;36;1mAssociate Create (0.0ms) [0m [0;1mINSERT INTO
> `associates` (`prefix`, `city`, `dob`, `ssno`, `phonework`, `street1`,
> `username`, `middlename`, `street2`, `country`, `custom1`,
> `firstname`, `lastname`, `inoutexplanation`, `custom2`, `notes`,
> `crossid`, `postalcode`, `phonehome`, `phoneother`, `custom3`,
> `branch`, `custom4`, `deleted`, `phonefax`, `organization`, `user_id`,
> `tstamp`, `phonecell`, `jobtitle`, `startdate`, `inoutstatus`,
> `state`, `email`, `maritalstatus`) VALUES(NULL, NULL, NULL, NULL,
> NULL, NULL, 'joey', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, 1,
> NULL, NULL, NULL, '2009-05-21', NULL, NULL, '[email protected]', NULL) [0m
> [4;35;1mSQL (0.0ms) [0m [0mCOMMIT [0m
>
> TypeError (can't dup Fixnum):
> app/controllers/users_controller.rb:17:in `create'
>
> Rendered rescues/_trace (109.0ms)
> Rendered rescues/_request_and_response (0.0ms)
> Rendering rescues/layout (internal_server_error)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---