Jeff Ward
2006-Jun-05 23:32 UTC
[Rails] When adding a record in console, a parameter comes in as null even when I set it
In console, I am trying to create a User but the :account_id does not come in. Console just gives me back :account_id => nil. Obviously I''m trying to set it though. Silly console... But, I can set the account_id column in my controller like so: @user = User.new(params[:user]) @user.account_id = account.id @user.save Here''s what I give to the controller: User.create :name => "Administrator", :username => "admin", :password => "1234", :email => "support@mydomain.com", :account_id => 1 Console gives me: => #<User:0x3b55158 @attributes={"name"=>"Administrator", "account_id"=>nil, "hashed_password"=>"7110eda4d09e062aa5e4a390b0a572ac0d2c0220", "username"=>"admin", "id"=>8, "created_at"=>Mon Jun 05 16:13:18 Pacific Standard Time 2006, "email"=>"support@mydomain.com"}, @errors=#<ActiveRecord::Errors:0x3b51e88 @base=#<User:0x3b55158 ...>, @errors={}>, @new_record=false, @password=nil> I am doing some things in the user.rb Model file and I think it has something to do with the attr_ bits which I don''t fully understand. my user.rb file... any ideas? require "digest/sha1" class User < ActiveRecord::Base belongs_to :account attr_accessor :password attr_accessible :username, :password, :email, :name validates_uniqueness_of :username, :scope => :account_id validates_presence_of :username, :password, :name, :email, :account_id validates_format_of :email, :with => / ^[-^!$#%&''*+\/=?`{|}~.\w]+ @[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])* (\.[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])*)+$/x, :message => "must be a valid email address", :on => :create def before_create self.hashed_password = User.hash_password(self.password) end def after_create @password = nil end def self.hash_password(password) Digest::SHA1.hexdigest(password) end def self.login(username, password, account_id) hashed_password = hash_password(password || "") find_by_username_and_hashed_password_and_account_id(username,hashed_password,account_id) end def try_to_login(account_id) User.login(self.username, self.password, account_id) end end -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060605/f37cba6f/attachment-0001.html
Jeff Ward
2006-Jun-09 01:22 UTC
[Rails] Re: When adding a record in console, a parameter comes in as null even when I set it
Okay, so I found what seems to be a hack to get this to work... user = User.create :name => "aaa", :username => "bbb", :password => "1234", :email => "ddd@ddd.com" user.account = Account.find(1) user.password = "1234" user.save It needed the password before it would let me save the user.account. Probably because of the hashed password stuff I did. I don''t fully understand the attr_accessor stuff. But this is my model file... ============== require "digest/sha1" class User < ActiveRecord::Base belongs_to :account attr_accessor :password attr_accessible :username, :password, :email, :name validates_uniqueness_of :username, :scope => :account_id validates_presence_of :username, :password, :name, :email validates_format_of :email, :with => / ^[-^!$#%&''*+\/=?`{|}~.\w]+ @[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])* (\.[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])*)+$/x, :message => "must be a valid email address", :on => :create def before_create self.hashed_password = User.hash_password(self.password) end def after_create @password = nil end def self.hash_password(password) Digest::SHA1.hexdigest(password) end def self.login(username, password, account_id) hashed_password = hash_password(password || "") find_by_username_and_hashed_password_and_account_id(username,hashed_password,account_id) end def try_to_login(account_id) User.login(self.username, self.password, account_id) end end ============= On 6/5/06, Jeff Ward <animikii@gmail.com> wrote:> In console, I am trying to create a User but the :account_id does not come > in. Console just gives me back :account_id => nil. Obviously I''m trying to > set it though. Silly console... > > But, I can set the account_id column in my controller like so: > > @user = User.new(params[:user]) > @user.account_id = account.id > @user.save > > Here''s what I give to the controller: > > User.create :name => "Administrator", :username => "admin", :password => > "1234", :email => "support@mydomain.com", :account_id => 1 > > Console gives me: > > => #<User:0x3b55158 @attributes={"name"=>"Administrator", > "account_id"=>nil, > "hashed_password"=>"7110eda4d09e062aa5e4a390b0a572ac0d2c0220", > "username"=>"admin", "id"=>8, "created_at"=>Mon Jun 05 16:13:18 Pacific > Standard Time 2006, "email"=>" support@mydomain.com"}, > @errors=#<ActiveRecord::Errors:0x3b51e88 > @base=#<User:0x3b55158 ...>, @errors={}>, @new_record=false, @password=nil> > > I am doing some things in the user.rb Model file and I think it has > something to do with the attr_ bits which I don''t fully understand. > > my user.rb file... any ideas? > > require "digest/sha1" > class User < ActiveRecord::Base > belongs_to :account > attr_accessor :password > attr_accessible :username, :password, :email, :name > > validates_uniqueness_of :username, :scope => :account_id > validates_presence_of :username, :password, :name, :email, :account_id > validates_format_of :email, :with => / > ^[-^!$#%&''*+\/=?`{|}~.\w]+ > @[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])* > (\.[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])*)+$/x, > :message => "must be a valid email address", > :on => :create > > def before_create > self.hashed_password = User.hash_password(self.password) > end > def after_create > @password = nil > end > def self.hash_password(password) > Digest::SHA1.hexdigest(password) > end > def self.login(username, password, account_id) > hashed_password = hash_password(password || "") > > find_by_username_and_hashed_password_and_account_id(username,hashed_password,account_id) > end > def try_to_login(account_id) > User.login(self.username, self.password, account_id) > end > end > > >
Francois Beausoleil
2006-Jun-09 01:31 UTC
[Rails] When adding a record in console, a parameter comes in as null even when I set it
Hello Jeff ! 2006/6/5, Jeff Ward <animikii@gmail.com>:> User.create :name => "Administrator", :username => "admin", :password => > "1234", :email => "support@mydomain.com", :account_id => 1> class User < ActiveRecord::Base > attr_accessible :username, :password, :email, :name > end#attr_accessible tells AR which attributes are available through mass-assignment. Since account_id is NOT in the attr_accessible list, AR prevents it''s value from being set. If instead you do u = User.new :name => "Administrator", :username => "admin", :password => "1234", :email => "support@mydomain.com" u.account_id = 1 u.save! you''ll be fine. Some related info: #attr_accessible: http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M000874 #attr_protected (the reverse of attr_accessible): http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M000873 Trevor Squires quiz: http://tinyurl.com/prxdl Hope that helps ! -- Fran?ois Beausoleil http://blog.teksol.info/