ActiveRecord enum error: "is not a valid value" - ruby-on-rails

I have a model with enum:
enum pending_users: {
pending_users_disabled: 0,
pending_users_enabled: 1
}
And here is how the field described in schema.rb:
t.integer "pending_users", limit: 4, default: 0, null: false
When I try to update it via the controller with the following parameters:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "group"=>{"pending_users"=>"1"}, "commit"=>"Update Group", "id"=>"33"}
I see the following error:
ArgumentError - '1' is not a valid pending_users:
activerecord (4.2.7.1) lib/active_record/enum.rb:104:in `block (3 levels) in enum'
activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:54:in `_assign_attribute'
activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes'
actionpack (4.2.7.1) lib/action_controller/metal/strong_parameters.rb:185:in `each_pair'
activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:35:in `assign_attributes'
activerecord (4.2.7.1) lib/active_record/persistence.rb:251:in `block in update'
activerecord (4.2.7.1) lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'
activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
activerecord (4.2.7.1) lib/active_record/transactions.rb:220:in `transaction'
activerecord (4.2.7.1) lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
activerecord (4.2.7.1) lib/active_record/persistence.rb:250:in `update'
app/controllers/groups_controller.rb:53:in `update'
From my perspective, 1 is a valid value for the enum. What can cause such behavior?

You should assign the enum with a string (the key). So 1 should instead be "pending_users_enabled".

Related

Rails Devise Gem, (undefined method `to_datetime' for nil:NilClass) when i want to recover a password

i'm having troubles with Devise Gem, i'm using the default recoverable methods, the links is being sent. The reset values (reset_password_sent_at) is saved in the database, but when i have to write down the new password and update it, gives this error
NoMethodError (undefined method `to_datetime' for nil:NilClass):
activesupport (4.0.2) lib/active_support/core_ext/date_time/calculations.rb:161:in `<=>'
activesupport (4.0.2) lib/active_support/core_ext/time/calculations.rb:286:in `compare_with_coercion'
activesupport (4.0.2) lib/active_support/time_with_zone.rb:214:in `<=>'
activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `=='
activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `!='
activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `_field_changed?'
activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:66:in `write_attribute'
activerecord (4.0.2) lib/active_record/attribute_methods/time_zone_conversion.rb:39:in `reset_password_sent_at='
devise (3.5.6) lib/devise/models/recoverable.rb:94:in `clear_reset_password_token'
devise (3.5.6) lib/devise/models/recoverable.rb:32:in `block (2 levels) in <module:Recoverable>'
activesupport (4.0.2) lib/active_support/callbacks.rb:377:in `_run__1626105923374900797__update__callbacks'
activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks'
activerecord (4.0.2) lib/active_record/callbacks.rb:310:in `update_record'
activerecord (4.0.2) lib/active_record/timestamp.rb:70:in `update_record'
activerecord (4.0.2) lib/active_record/persistence.rb:477:in `create_or_update'
activerecord (4.0.2) lib/active_record/callbacks.rb:302:in `block in create_or_update'
activesupport (4.0.2) lib/active_support/callbacks.rb:393:in `_run__1626105923374900797__save__callbacks'
activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks'
activerecord (4.0.2) lib/active_record/callbacks.rb:302:in `create_or_update'
activerecord (4.0.2) lib/active_record/persistence.rb:106:in `save'
activerecord (4.0.2) lib/active_record/validations.rb:51:in `save'
activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:32:in `save'
activerecord (4.0.2) lib/active_record/transactions.rb:270:in `block (2 levels) in save'
activerecord (4.0.2) lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `block in transaction'
activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `within_new_transaction'
activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `transaction'
activerecord (4.0.2) lib/active_record/transactions.rb:209:in `transaction'
activerecord (4.0.2) lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
activerecord (4.0.2) lib/active_record/transactions.rb:270:in `block in save'
activerecord (4.0.2) lib/active_record/transactions.rb:281:in `rollback_active_record_state!'
activerecord (4.0.2) lib/active_record/transactions.rb:269:in `save'
devise (3.5.6) lib/devise/models/recoverable.rb:48:in `reset_password'
devise (3.5.6) lib/devise/models/recoverable.rb:141:in `reset_password_by_token'
devise (3.5.6) app/controllers/devise/passwords_controller.rb:32:in `update'
debugging this its seems to be a problem with the reset_password_sent_at being nil when the password is reset (lib/devise/models/recoverable.rb:94:inclear_reset_password_token)
I've try to change my local time to the UTC stored but the problem isn't that. Any suggestion?
My solution for this was to upgrade my rails from 4.0.2 to 4.2.7. When i run the bundle install and update the gemfile dependencies now is working.
Upgrading devise from (3.5.6) to (4.2.0)

Rails STI, callbacks, and public vs. private

I've got a callback and method defined in the parent class of a Rails STI setup.
class Parent < ActiveRecord::Base
before_save :populate_name
# implicitly public
def populate_name
self.name = "foobar"
end
class Child < Parent
end
When I make populate_name private or protected like this:
class Parent < ActiveRecord::Base
before_save :populate_name
private
def populate_name
self.name = "foobar"
end
class Child < Parent
end
Then I get this error:
NameError - undefined local variable or method `populate_name' for #<Child:0x007ff901eace30>:
activemodel (3.2.16) lib/active_model/attribute_methods.rb:407:in `method_missing'
activerecord (3.2.16) lib/active_record/attribute_methods.rb:149:in `method_missing'
activesupport (3.2.16) lib/active_support/callbacks.rb:407:in `_run__3119425560225797910__save__1411052685854526397__callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.16) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.16) lib/active_record/callbacks.rb:264:in `create_or_update'
activerecord (3.2.16) lib/active_record/persistence.rb:84:in `save'
activerecord (3.2.16) lib/active_record/validations.rb:50:in `save'
activerecord (3.2.16) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block (2 levels) in save'
activerecord (3.2.16) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:208:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block in save'
activerecord (3.2.16) lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
activerecord (3.2.16) lib/active_record/transactions.rb:258:in `save'
app/controllers/child_controller.rb:135:in `create_or_update'
Is public required for the callback?
Private methods can't be accessed by children. Protected methods can. The child doesn't have access to the private method.
When should we consider using private or protected?
Keeping this question up in case anybody ever googles this (and it's a fat finger thing).
I had accidently put the private part after the end for the class before the module end. It's easy to just throw the private, then private method before the last end, but one really needs to be careful if there's nesting!
So yes
make the callbacks private
if you don't see something in a google query for something simple, you must have fat fingered something
module Foo
class Parent < ActiveRecord::Base
before_save :populate_name
end
private
def populate_name
self.name = "foobar"
end
end
class Child < Parent
end
Then I get this error:
NameError - undefined local variable or method `populate_name' for #<Child:0x007ff901eace30>:
activemodel (3.2.16) lib/active_model/attribute_methods.rb:407:in `method_missing'
activerecord (3.2.16) lib/active_record/attribute_methods.rb:149:in `method_missing'
activesupport (3.2.16) lib/active_support/callbacks.rb:407:in `_run__3119425560225797910__save__1411052685854526397__callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.16) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.16) lib/active_record/callbacks.rb:264:in `create_or_update'
activerecord (3.2.16) lib/active_record/persistence.rb:84:in `save'
activerecord (3.2.16) lib/active_record/validations.rb:50:in `save'
activerecord (3.2.16) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block (2 levels) in save'
activerecord (3.2.16) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:208:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block in save'
activerecord (3.2.16) lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
activerecord (3.2.16) lib/active_record/transactions.rb:258:in `save'
app/controllers/child_controller.rb:135:in `create_or_update'

ActiveRecord::ReadOnlyRecord Exception raised when parent is readonly

I have the following two models:
# app/models/customer.rb
class Customer < ActiveRecord::Base
has_paper_trail
serialize :mail_opt_out, Set
before_create :generate_token
has_many :wallets
has_many :tickets, through: :wallets
...
# We have a special seeded customer with id -1 that we don't want changing
def readonly?
persisted? && id < 0
end
end
# app/models/ticket.rb
class Ticket < ActiveRecord::Base
include SparkCast
has_paper_trail
belongs_to :price
belongs_to :basket
belongs_to :occurrence
has_one :event, through: :occurrence
has_one :wallet, through: :basket
has_one :basket_type, through: :basket
has_one :customer, through: :basket
delegate :id, to: :customer, allow_nil: true
...
def admit
ensure_can_admit
self.state = 'admitted'
self.save!
end
cast_on :admit, room: :admittance
def as_cast
{
id: id,
customer_id: customer_id
}
end
end
The relevant association is a little convoluted, but is customers -> wallets -> baskets -> tickets.
When I call admit on an instance of a ticket that belongs to our customer with id -1, (which is read only) I get an ActiveRecord::ReadOnlyRecord exception.
I'm confused as to what is causing this, as neither ticket nor customer have any before_update callbacks. If I change
has_one :customer, through: :basket
to
delegate :customer, to: :basket
then everything is fine. Something seems to be either trying to update the customer, or at least checking if it is readonly.
I've done a bit of stepping through the save procedure using byebug, but haven't been able to find anything useful.
What is likely to be checking if an associated model is readonly, and how do I get around this? Is using delegate the best option here?
Edited to add:
Also including SparkCast, which I had omitted previously. Removing the cast_on method from my ticket model is fixing the problem.
# app/models/concerns/spark_cast.rb
module SparkCast
extend ActiveSupport::Concern
module ClassMethods
def cast_on(*args)
# Options are the last argument.
options = args.pop
room = options[:room]
args.each do |operation|
class_eval do
begin
alias_method "#{operation}_without_cast", operation
define_method operation do |*args|
cast_hash = as_cast
...
send("#{operation}_without_cast", *args)
cast(room, operation, cast_hash)
end
rescue NameError => e
raise "#{e.name} has not been defined yet. Include cast_on after method definition"
end
end
end
end
end
end
Backtrace:
- activerecord (4.1.0) lib/active_record/persistence.rb:481:in `create_or_update'
- activerecord (4.1.0) lib/active_record/callbacks.rb:302:in `block in create_or_update'
- activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `run_callbacks'
- activerecord (4.1.0) lib/active_record/callbacks.rb:302:in `create_or_update'
- activerecord (4.1.0) lib/active_record/persistence.rb:103:in `save'
- activerecord (4.1.0) lib/active_record/validations.rb:51:in `save'
- activerecord (4.1.0) lib/active_record/attribute_methods/dirty.rb:21:in `save'
- activerecord (4.1.0) lib/active_record/transactions.rb:268:in `block (2 levels) in save'
- activerecord (4.1.0) lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
- activerecord (4.1.0) lib/active_record/connection_adapters/abstract/database_statements.rb:209:in `transaction'
- activerecord (4.1.0) lib/active_record/transactions.rb:208:in `transaction'
- activerecord (4.1.0) lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
- activerecord (4.1.0) lib/active_record/transactions.rb:268:in `block in save'
- activerecord (4.1.0) lib/active_record/transactions.rb:283:in `rollback_active_record_state!'
- activerecord (4.1.0) lib/active_record/transactions.rb:267:in `save'
- activerecord (4.1.0) lib/active_record/autosave_association.rb:393:in `save_has_one_association'
- activerecord (4.1.0) lib/active_record/autosave_association.rb:188:in `block in add_autosave_association_callbacks'
- activesupport (4.1.0) lib/active_support/callbacks.rb:424:in `block in make_lambda'
- activesupport (4.1.0) lib/active_support/callbacks.rb:221:in `block in halting_and_conditional'
- activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `run_callbacks'
- activerecord (4.1.0) lib/active_record/callbacks.rb:310:in `update_record'
- activerecord (4.1.0) lib/active_record/timestamp.rb:70:in `update_record'
- activerecord (4.1.0) lib/active_record/persistence.rb:482:in `create_or_update'
- activerecord (4.1.0) lib/active_record/callbacks.rb:302:in `block in create_or_update'
- activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
- activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `run_callbacks'
- activerecord (4.1.0) lib/active_record/callbacks.rb:302:in `create_or_update'
- activerecord (4.1.0) lib/active_record/persistence.rb:125:in `save!'
- activerecord (4.1.0) lib/active_record/validations.rb:57:in `save!'
- activerecord (4.1.0) lib/active_record/attribute_methods/dirty.rb:29:in `save!'
- activerecord (4.1.0) lib/active_record/transactions.rb:273:in `block in save!'
- activerecord (4.1.0) lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
- activerecord (4.1.0) lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `block in transaction'
- activerecord (4.1.0) lib/active_record/connection_adapters/abstract/database_statements.rb:219:in `within_new_transaction'
- activerecord (4.1.0) lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `transaction'
- activerecord (4.1.0) lib/active_record/transactions.rb:208:in `transaction'
- activerecord (4.1.0) lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
- activerecord (4.1.0) lib/active_record/transactions.rb:273:in `save!'
- () home/hayden/development/SparkSeat/api/app/models/ticket.rb:79:in `admit'

find method having trouble excuting a variable in the view

I am trying to display user's email in the view with User.find(#id).email,but it gives me an error couldn't find user without id,but i am sure the #id carries id 3,because <%=#id%> displays 3.Another thing If i hard code the id as User.find(3).email it displays the email succesfully.The problem occurs only when i put #id variable as a parameter in the find method,what is going on here?Thank you in advance.
View/profile.html.erb
<% #books.each do |book|%>
<%=book.user_id %> =>displays 3
<%= User.find(book.user_id).email %> =>cant find the id
<%=User.find(3).email%> =>works fine
Error
Couldn't find User without an ID
activerecord (3.1.0.rc8) lib/active_record/relation/finder_methods.rb:302:in `find_with_ids'
activerecord (3.1.0.rc8) lib/active_record/relation/finder_methods.rb:107:in `find'
activerecord (3.1.0.rc8) lib/active_record/base.rb:441:in `find'
app/views/deal/show.html.erb:83:in `block (2 levels) in _app_views_deal_show_html_erb__772775201_99014040'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
app/views/deal/show.html.erb:80:in `block in _app_views_deal_show_html_erb__772775201_99014040'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
app/views/deal/show.html.erb:13:in `_app_views_deal_show_html_erb__772775201_99014040'
actionpack (3.1.0.rc8) lib/action_view/template.rb:144:in `block in render'
activesupport (3.1.0.rc8) lib/active_support/notifications.rb:55:in `instrument'
actionpack (3.1.0.rc8) lib/action_view/template.rb:142:in `render'
actionpack (3.1.0.rc8) lib/action_view/renderer/template_renderer.rb:40:in `block (2levels) in render_template'n/finder_methods.rb:302:in `find_with_ids'
activerecord (3.1.0.rc8) lib/active_record/relation/finder_methods.rb:107:in `find'
activerecord (3.1.0.rc8) lib/active_record/base.rb:441:in `find'
app/views/deal/show.html.erb:83:in `block (2 levels) in _app_views_deal_show_html_erb__772775201_99014040'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
activerecord (3.1.0.rc8) lib/active_record/relation.rb:15:in `each'
app/views/deal/show.html.erb:80:in `block in _.........................
Ensure that #id is an integer. If it is, I don't see why it wouldn't work. I just tried the exact same thing in my own application and it worked fine.
To ensure that #id is an integer and not a string, try this:
<%= User.find(#id.to_i).email %>
If that does not work, please copy/paste your exact error back here so we can look further into the problem.

rails2 to rails3 upgrade problem

I am trying to upgrade my application from Rails 2.3.5 to Rails 3.0.3.
Models:
Project.rb
has_many :project_roles, :dependent => :destroy
alias :roles :project_roles
after_create :create_cal_for_project, :make_project_owner
def create_calendar_for_project
self.calendars.create(:name => "default")
end
def make_project_owner
#Make owner of project when created
self.roles.create(:user => User.curr_user, :name => 'O')
end
ProjectRole.rb
belongs_to :project
belongs_to :user
project_roles table columns are user_id, project_id, name
I am getting a hard time with the following error, please suggest.
Thanks.
→ rails c
> Loading development environment (Rails 3.0.3)
ruby-1.9.2-p0> User.curr_user = User.first
=> #<User id: 1, username: "tispratik", login_email: "tispratik#gmail.com", > is_email_verified: nil, crypted_password: "deed6fa27ffefa57e63592a9b59295abf2660447cf281f34857...", password_salt: "YsD2nLte3pZy1FZ78GD", persistence_token: "84e44908be77b2dc1e41f8dfeacf9ef20c30050ff0c53854e0d...", single_access_token: "cp1bqVSheDh7vl9J48V", perishable_token: "6pGPzdw48nJnJAHsIZQW", last_login_ip: nil, last_login_at: nil, created_at: "2010-11-23 06:00:09", updated_at: "2010-11-23 06:00:09">
ruby-1.9.2-p0> p = Project.create(:name => "ad", :description => "add")
NoMethodError: undefined method `name' for nil:NilClass
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in `method_missing'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/to_sql.rb:57:in `block in visit_Arel_Nodes_InsertStatement'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/to_sql.rb:56:in `map'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/to_sql.rb:56:in `visit_Arel_Nodes_InsertStatement'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/visitor.rb:15:in `visit'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/visitor.rb:5:in `accept'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/to_sql.rb:19:in `block in accept'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:110:in `with_connection'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/visitors/to_sql.rb:17:in `accept'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/tree_manager.rb:19:in `to_sql'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/arel-2.0.4/lib/arel/select_manager.rb:191:in `insert'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/relation.rb:14:in `insert'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/persistence.rb:270:in `create'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/timestamp.rb:47:in `create'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/callbacks.rb:281:in `block in create'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:413:in `_run_create_callbacks'
... 30 levels...
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/attribute_methods/dirty.rb:21:in `save'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:237:in `block (2 levels) in save'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:204:in `transaction'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:237:in `block in save'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:248:in `rollback_active_record_state!'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:236:in `save'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/base.rb:498:in `create'
from (irb):2
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
The problem is in the make_project_owner callback. create_calendar_for_project runs just fine.
I changed make_project_owner to the following still the same problem occurs.
def make_project_owner
#Make owner of project when created
#role.create(:user => User.curr_user, :name => 'O')
ProjectRole.create(:user => User.curr_user, :project => self, :name => "O")
end
I tried downgrading rails:
rails 3.0.2 -> has same problem
rails 3.0.1 -> has different error
undefined method `name' for #<Arel::Value:0x00000005795090>
Application Trace | Framework Trace | Full Trace
arel (1.0.1) lib/arel/engines/sql/engine.rb:26:in `block in create'
arel (1.0.1) lib/arel/engines/sql/engine.rb:26:in `each'
arel (1.0.1) lib/arel/engines/sql/engine.rb:26:in `detect'
arel (1.0.1) lib/arel/engines/sql/engine.rb:26:in `create'
arel (1.0.1) lib/arel/algebra/relations/writes.rb:24:in `call'
arel (1.0.1) lib/arel/session.rb:17:in `create'
arel (1.0.1) lib/arel/algebra/relations/relation.rb:159:in `insert'
activerecord (3.0.1) lib/active_record/relation.rb:14:in `insert'
activerecord (3.0.1) lib/active_record/persistence.rb:271:in `create'
activerecord (3.0.1) lib/active_record/timestamp.rb:47:in `create'
activerecord (3.0.1) lib/active_record/callbacks.rb:281:in `block in create'
activesupport (3.0.1) lib/active_support/callbacks.rb:413:in `_run_create_callbacks'
activerecord (3.0.1) lib/active_record/callbacks.rb:281:in `create'
activerecord (3.0.1) lib/active_record/persistence.rb:247:in `create_or_update'
activerecord (3.0.1) lib/active_record/callbacks.rb:277:in `block in create_or_update'
activesupport (3.0.1) lib/active_support/callbacks.rb:423:in `_run_save_callbacks'
activerecord (3.0.1) lib/active_record/callbacks.rb:277:in `create_or_update'
activerecord (3.0.1) lib/active_record/persistence.rb:39:in `save'
activerecord (3.0.1) lib/active_record/validations.rb:43:in `save'
activerecord (3.0.1) lib/active_record/attribute_methods/dirty.rb:21:in `save'
activerecord (3.0.1) lib/active_record/transactions.rb:237:in `block (2 levels) in save'
activerecord (3.0.1) lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
activerecord (3.0.1) lib/active_record/transactions.rb:204:in `transaction'
activerecord (3.0.1) lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
activerecord (3.0.1) lib/active_record/transactions.rb:237:in `block in save'
activerecord (3.0.1) lib/active_record/transactions.rb:248:in `rollback_active_record_state!'
activerecord (3.0.1) lib/active_record/transactions.rb:236:in `save'
activerecord (3.0.1) lib/active_record/base.rb:498:in `create'
app/models/project.rb:70:in `make_project_owner'
activesupport (3.0.1) lib/active_support/callbacks.rb:463:in `_run_create_callbacks'
activerecord (3.0.1) lib/active_record/callbacks.rb:281:in `create'
activerecord (3.0.1) lib/active_record/persistence.rb:247:in `create_or_update'
activerecord (3.0.1) lib/active_record/callbacks.rb:277:in `block in create_or_update'
activesupport (3.0.1) lib/active_support/callbacks.rb:428:in `_run_save_callbacks'
activerecord (3.0.1) lib/active_record/callbacks.rb:277:in `create_or_update'
activerecord (3.0.1) lib/active_record/persistence.rb:39:in `save'
activerecord (3.0.1) lib/active_record/validations.rb:43:in `save'
activerecord (3.0.1) lib/active_record/attribute_methods/dirty.rb:21:in `save'
activerecord (3.0.1) lib/active_record/transactions.rb:237:in `block (2 levels) in save'
activerecord (3.0.1) lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
activerecord (3.0.1) lib/active_record/transactions.rb:204:in `transaction'
activerecord (3.0.1) lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
activerecord (3.0.1) lib/active_record/transactions.rb:237:in `block in save'
activerecord (3.0.1) lib/active_record/transactions.rb:248:in `rollback_active_record_state!'
activerecord (3.0.1) lib/active_record/transactions.rb:236:in `save'
app/controllers/projects_controller.rb:34:in `create'
actionpack (3.0.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.0.1) lib/abstract_controller/base.rb:150:in `process_action'
actionpack (3.0.1) lib/action_controller/metal/rendering.rb:11:in `process_action'
actionpack (3.0.1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.0.1) lib/active_support/callbacks.rb:460:in `_run__2176748434120211400__process_action__1031157339911956458__callbacks'
activesupport (3.0.1) lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks'
activesupport (3.0.1) lib/active_support/callbacks.rb:93:in `run_callbacks'
actionpack (3.0.1) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.0.1) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.0.1) lib/active_support/notifications.rb:52:in `block in instrument'
activesupport (3.0.1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (3.0.1) lib/active_support/notifications.rb:52:in `instrument'
actionpack (3.0.1) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.0.1) lib/action_controller/metal/rescue.rb:17:in `process_action'
actionpack (3.0.1) lib/abstract_controller/base.rb:119:in `process'
actionpack (3.0.1) lib/abstract_controller/rendering.rb:40:in `process'
actionpack (3.0.1) lib/action_controller/metal.rb:133:in `dispatch'
actionpack (3.0.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.0.1) lib/action_controller/metal.rb:173:in `block in action'
actionpack (3.0.1) lib/action_dispatch/routing/route_set.rb:62:in `call'
actionpack (3.0.1) lib/action_dispatch/routing/route_set.rb:62:in `dispatch'
actionpack (3.0.1) lib/action_dispatch/routing/route_set.rb:27:in `call'
rack-mount (0.6.13) lib/rack/mount/route_set.rb:148:in `block in call'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:93:in `block in recognize'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:75:in `optimized_each'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:92:in `recognize'
rack-mount (0.6.13) lib/rack/mount/route_set.rb:139:in `call'
actionpack (3.0.1) lib/action_dispatch/routing/route_set.rb:492:in `call'
haml (3.0.24) lib/sass/plugin/rack.rb:41:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/head.rb:14:in `call'
rack (1.2.1) lib/rack/methodoverride.rb:24:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/flash.rb:182:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/cookies.rb:287:in `call'
activerecord (3.0.1) lib/active_record/query_cache.rb:32:in `block in call'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'
activerecord (3.0.1) lib/active_record/query_cache.rb:12:in `cache'
activerecord (3.0.1) lib/active_record/query_cache.rb:31:in `call'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:355:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/callbacks.rb:46:in `block in call'
activesupport (3.0.1) lib/active_support/callbacks.rb:415:in `_run_call_callbacks'
actionpack (3.0.1) lib/action_dispatch/middleware/callbacks.rb:44:in `call'
rack (1.2.1) lib/rack/sendfile.rb:107:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/show_exceptions.rb:46:in `call'
railties (3.0.1) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.1) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.2.1) lib/rack/lock.rb:11:in `block in call'
<internal:prelude>:10:in `synchronize'
rack (1.2.1) lib/rack/lock.rb:11:in `call'
actionpack (3.0.1) lib/action_dispatch/middleware/static.rb:30:in `call'
railties (3.0.1) lib/rails/application.rb:168:in `call'
railties (3.0.1) lib/rails/application.rb:77:in `method_missing'
railties (3.0.1) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.2.1) lib/rack/content_length.rb:13:in `call'
rack (1.2.1) lib/rack/handler/webrick.rb:52:in `service'
/home/pratik/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/home/pratik/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/home/pratik/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
I had a similar problem, but i was able to solve this with the following code:
module Connection
class DB1 < ActiveRecord::Base
self.abstract_class = true
establish_connection(Rails.env)
end
class DB2 < ActiveRecord::Base
self.abstract_class = true
establish_connection("#{Rails.env}_db2")
end
end
class Project < Connection::DB1
Maybe it worked for me because of the usages of establish_connection in all models.
I don't have time to test this so I cannot say for sure, but this line looks suspect to me:
self.calendars.create(:name => "default")
I would think it should be like this:
Calendar.create(:name => "default", :project_id => self.id)

Resources