Guest User

Untitled

a guest
Sep 2nd, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.49 KB | None | 0 0
  1. Rails habtm grief am I dumb or rails bug? (desperate ; )
  2. class Pushbroom::UserAccount < ActiveRecord::Base
  3. require 'digest/md5'
  4. require 'base64'
  5.  
  6. establish_connection :pushbroom
  7. set_table_name :user_account
  8. set_primary_key :id
  9.  
  10. has_and_belongs_to_many :user_roles, :join_table => 'pb_prod.users_roles', :class_name => 'Pushbroom::UserRole', :foreign_key => 'user_account_id', :association_foreign_key => 'user_role_id'
  11. belongs_to :user, :dependent => :destroy
  12.  
  13.  
  14. attr_accessible :user_roles, :admin_notes, :enabled, :username, :password_hash, :prefStore, :accepted_tos, :do_not_contact
  15. end
  16.  
  17.  
  18. class Pushbroom::UserRole < ActiveRecord::Base
  19.  
  20. establish_connection :pushbroom
  21. set_table_name :user_role
  22. set_primary_key :id
  23.  
  24. has_and_belongs_to_many :user_accounts, :join_table => 'pb_prod.users_roles', :class_name => 'Pushbroom::UserAccount', :foreign_key => 'user_role_id', :association_foreign_key => 'user_account_id'
  25.  
  26.  
  27. end
  28.  
  29. class User < ActiveRecord::Base
  30.  
  31. after_create :send_welcome_email
  32. before_save :create_pushbroom_user_data
  33.  
  34. # Include default devise modules. Others available are:
  35. # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  36. devise :database_authenticatable, :registerable,
  37. :recoverable, :rememberable, :trackable, :validatable
  38.  
  39. belongs_to :pb_user_account, :class_name => "Pushbroom::UserAccount", :foreign_key => "pb_user_account_id", :dependent => :destroy, :autosave => true
  40.  
  41. # Setup accessible (or protected) attributes for your model
  42. attr_accessible :first_name, :last_name, :username, :dob, :email, :password, :password_confirmation, :remember_me
  43.  
  44. validates_presence_of :first_name, :last_name, :username, :dob
  45. validates_date :dob, :on_or_after => lambda { 100.years.ago }, :on_or_after_message => "must be on or after #{100.years.ago.strftime('%m-%d-%Y')}"
  46. validates_date :dob, :on_or_before => lambda { 13.years.ago }, :on_or_before_message => "must be on or before #{13.years.ago.strftime('%m-%d-%Y')}"
  47.  
  48. def create_pushbroom_user_data
  49. pb_user = create_pushbroom_user
  50. pb_user_account = create_pushbroom_user_account(pb_user)
  51. pb_user_account.user_roles << Pushbroom::UserRole.find_by_name('user')
  52. self.pb_user_account = pb_user_account
  53. end
  54.  
  55. def create_pushbroom_user
  56. pb_user = Pushbroom::User.new
  57. pb_user.attributes = self.attributes.slice(
  58. "email",
  59. "first_name",
  60. "last_name",
  61. "dob")
  62.  
  63. pb_user
  64. end
  65.  
  66. def create_pushbroom_user_account(pb_user)
  67. pb_user_account = Pushbroom::UserAccount.new
  68. pb_user_account.enabled = true
  69. pb_user_account.password_hash = Pushbroom::UserAccount.create_password_digest(@plaintext_password, self.username)
  70. pb_user_account.username = self.username
  71. pb_user_account.user = pb_user
  72.  
  73. pb_user_account
  74. end
  75.  
  76. ruby-1.9.2-p180 :001 > def user_fred
  77. ruby-1.9.2-p180 :002?> {
  78. ruby-1.9.2-p180 :003 > :first_name => "Fred",
  79. ruby-1.9.2-p180 :004 > :last_name => "Flinstone",
  80. ruby-1.9.2-p180 :005 > :username => "fflint",
  81. ruby-1.9.2-p180 :006 > :dob => "1986-06-01",
  82. ruby-1.9.2-p180 :007 > :email => "fred@mydomain.org",
  83. ruby-1.9.2-p180 :008 > :password => "badpass"
  84. ruby-1.9.2-p180 :009?> }
  85. ruby-1.9.2-p180 :010?> end
  86. => nil
  87. ruby-1.9.2-p180 :011 > user = User.new(user_fred)
  88. => #<User id: nil, email: "fred@mydomain.org", encrypted_password: "$2a$10$IiEOEoSnXIrP7VJAQYckfOVXuzm7Y5ZGo20ayLpSkHhz...", reset_password_token: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, first_name: "Fred", last_name: "Flinstone", username: "fflint", dob: "1986-06-01", pb_user_account_id: nil>
  89. ruby-1.9.2-p180 :012 > user.create_pushbroom_user_data
  90. => #<Pushbroom::UserAccount id: nil, created_by: nil, created_at: nil, updated_by: nil, updated_at: nil, admin_notes: nil, enabled: true, username: "fflint", password_hash: "blah blah", user_id: nil, prefStore: nil, accepted_tos: nil, do_not_contact: nil>
  91. ruby-1.9.2-p180 :013 > user.pb_user_account.user_roles
  92. => [#<Pushbroom::UserRole id: 1, created_by: "script", created_at: "2008-11-10 12:10:44", updated_by: "script", updated_at: "2008-11-10 12:10:44", admin_notes: "", name: "user", description: "Generic User Role", conditional: false>]
  93. ruby-1.9.2-p180 :014 > user.save!
  94. NoMethodError: undefined method `relation' for nil:NilClass
  95. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activesupport- 3.0.5/lib/active_support/whiny_nil.rb:48:in `method_missing'
  96. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/arel- 2.0.9/lib/arel/insert_manager.rb:22:in `insert'
  97. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/arel- 2.0.9/lib/arel/crud.rb:26:in `insert'
  98. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord- 3.0.5/lib/active_record/associations/has_and_belongs_to_many_association.rb:76:in `insert_record'
  99. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord- 3.0.5/lib/active_record/associations/association_proxy.rb:151:in `send'
  100. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/autosave_association.rb:306:in `block in save_collection_association'
  101. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/associations/association_collection.rb:431:in `block in method_missing'
  102. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/associations/association_proxy.rb:216:in `block in method_missing'
  103. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/associations/association_proxy.rb:216:in `each'
  104. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/associations/association_proxy.rb:216:in `method_missing'
  105. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/associations/association_collection.rb:431:in `method_missing'
  106. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/autosave_association.rb:297:in `save_collection_association'
  107. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/autosave_association.rb:163:in `block in add_autosave_association_callbacks'
  108. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activesupport-3.0.5/lib/active_support/callbacks.rb:415:in `_run_create_callbacks'
  109. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/callbacks.rb:281:in `create'
  110. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/persistence.rb:246:in `create_or_update'
  111. ... 18 levels...
  112. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/callbacks.rb:277:in `create_or_update'
  113. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/persistence.rb:56:in `save!'
  114. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/validations.rb:49:in `save!'
  115. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/attribute_methods/dirty.rb:30:in `save!'
  116. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/transactions.rb:245:in `block in save!'
  117. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord- 3.0.5/lib/active_record/transactions.rb:292:in `block in with_transaction_returning_status'
  118. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
  119. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/transactions.rb:207:in `transaction'
  120. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/transactions.rb:290:in `with_transaction_returning_status'
  121. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/activerecord-3.0.5/lib/active_record/transactions.rb:245:in `save!'
  122. from (irb):14
  123. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
  124. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
  125. from /Users/gander/.rvm/gems/ruby-1.9.2-p180@sms2/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>'
  126. from script/rails:6:in `require'
  127. from script/rails:6:in `<main>'ruby-1.9.2-p180 :015 >
  128.  
  129. class Pushbroom::UsersRolesRelationship < ActiveRecord::Base
  130.  
  131. establish_connection :pushbroom
  132. set_table_name :users_roles
  133.  
  134. belongs_to :user_account
  135. belongs_to :user_role
  136. end
  137.  
  138. class Pushbroom::UserAccount < ActiveRecord::Base
  139.  
  140. establish_connection :pushbroom
  141. set_table_name :user_account
  142. set_primary_key :id
  143.  
  144. has_many :users_roles_relationships
  145. has_many :user_roles, :through => :users_roles_relationships, :source => :user_role
  146. end
  147.  
  148. class Pushbroom::UserRole < ActiveRecord::Base
  149.  
  150. establish_connection :pushbroom
  151. set_table_name :user_role
  152. set_primary_key :id
  153.  
  154. has_many :users_roles_relationships
  155. has_many :user_accounts, :through => :users_roles_relationships, :source => :user_account
  156. end
  157.  
  158. def add_subscription_plan_roles_to_pb_user_account(pb_user_account)
  159. roles_granted = pb_user_account.user.subscriptions.first.subscription_plan.roles_granted
  160. pb_user_account.user_roles = roles_granted
  161. end
Add Comment
Please, Sign In to add comment