I wonder if all the accessors are created automatically in non-Rails application? By requiring 'active_record' and 'rubygems' didn't solve my problem. I just created a Ruby file with 2 classes inside: @@@ require 'rubygems' require 'active_record'
ActiveRecord::Base.establish_connection( :adapter => 'oracle_enhanced', :database => 'db_bname, :username => 'username, :password => 'pwd' )
class Supplier < ActiveRecord::Base set_table_name :lcssupplier set_primary_key :ida2a2 end
class RunUpdate def initialize(env = "dev") @env = env case @env when 'dev' @name = 'att1' else raise "Unknown environment: #{env}" end update_dpp_suplliers end
private def update_dpp_suplliers dpp_supplier = Supplier.where(:num2=>56180).first puts "Reading supplier name before update: #{dpp_supplier.read_attribute(@name)}" dpp_supplier.send("#{@name}=", "TOTO") dpp_supplier.save! puts "DPP supplier name AFTER update: #{dpp_supplier.read_attribute(@name)}" end end
RunUpdate.new('dev') @@@
It works without problem on another database (MySQL) but raises an error on Oracle DB. The only difference is that when running on MySQL DB, I didn't have to use 'set_table_name' and 'set_primary_key' because the table was created according the RoR convention. It's not the case for Oracle table. Here is the error I get: @@@ Reading supplier name before update: DP China / Shanghai - SHENZHOU KNITTING(AN HUI)CO.LTD C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/active_model/ attribute_methods.rb:271:in `module_eval': C:/Ruby192/lib/ruby/gems/ 1.9.1/gems/activemodel-3.0.5/lib/active_model/attribute_methods.rb: 272: syntax error, unexpected tGVAR, expecting ')' (SyntaxError) if method_defined?(:blob$entrysetadhocacl?) ^ C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/active_model/ attribute_methods.rb:273: syntax error, unexpected tGVAR, expecting $end undef :blob$entrysetadhocacl? ^ from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/ active_model/attribute_methods.rb:271:in `block (2 levels) in define_attribute_methods' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/ active_model/attribute_methods.rb:262:in `each' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/ active_model/attribute_methods.rb:262:in `block in define_attribute_methods' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/ active_model/attribute_methods.rb:261:in `each' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.0.5/lib/ active_model/attribute_methods.rb:261:in `define_attribute_methods' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.0.5/ lib/active_record/attribute_methods.rb:13:in `define_attribute_methods' from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.0.5/ lib/active_record/attribute_methods.rb:41:in `method_missing' from C:/Documents and Settings/MACHINE_DEV3/My Documents/ ror_prj/ruby_drafts/lib/update_cnuf_1.rb:44:in `update_dpp_suplliers' from C:/Documents and Settings/MACHINE_DEV3/My Documents/ ror_prj/ruby_drafts/lib/update_cnuf_1.rb:37:in `initialize' from C:/Documents and Settings/MACHINE_DEV3/My Documents/ ror_prj/ruby_drafts/lib/update_cnuf_1.rb:51:in `new' from C:/Documents and Settings/MACHINE_DEV3/My Documents/ ror_prj/ruby_drafts/lib/update_cnuf_1.rb:51:in `<main>' @@@ Any idea ?