Chris Sepic wrote:
> I recently modified the customer_number field in my Users table in a
> migration:
> 
> remove_column :users, :customer_number
> execute "CREATE SEQUENCE user_customer_number_seq MINVALUE 10000;"
> execute "ALTER TABLE users ADD customer_number integer " +
>         "DEFAULT nextval('user_customer_number_seq') NOT NULL UNIQUE;"
> 
> I want the default value (next in sequence) to be used when I create a
> new user. I thought Rails would handle this, but instead I'm getting:
> 
> PGError: ERROR:  null value in column "customer_number" violates
> not-null constraint
> 
> I want to keep the NOT NULL constraint. I thought about something like
> this:
> 
> before_validation_on_create :set_customer_number
> 
> def set_customer_number
>   cust_no = next_sequence_value('user_customer_number_seq')
>   self.customer_number = cust_no
> end
> 
> Although that's not quite right. next_sequence_value is not defined in
> the Postgres adapter. How would I write set_customer_number? Or would
> removing the null constraint and relying on validates_presence_of
> :customer_number be enough?

Ok, figured it out:

def set_customer_number
    customer_number_sequence = 'user_customer_number_seq'
    cust_no = connection.select_value("select 
nextval('#{customer_number_sequence}')")
    self.customer_number = cust_no
end

Actually ended up getting rid of the null constraint, but I still need 
the above for validation in one of my models.
-- 
Posted via http://www.ruby-forum.com/.
_______________________________________________
Railsi18n-discussion mailing list
Railsi18n-discussion@rubyforge.org
http://rubyforge.org/mailman/listinfo/railsi18n-discussion

Reply via email to