我試圖完全補償[重新] hrend上面的代碼做什麼(我沒 寫)
module Card #Creates a namespace called Card
MY_PACKAGE = "hello"
end
str1 = "BEGIN #{Card::MY_PACKAGE}.retrieve_card(" #Looks in a namespace called Card for the constant MY_PACKAGE
puts str1 #=> "BEGIN hello.retrieve_card("
my_attrs = ['dog', 'cat', 'squirrel']
arr = my_attrs.map { |a| ":#{a}, " }
p arr #=> [":dog, ", ":cat, ", ":squirrel, "]
str2 = arr.join('')
p str2 #=> ":dog, :cat, :squirrel,"
str3 = ':errormsg); END;'
p str3 #=> ":errormsg); END;"
array_of_strs = [str1, str2, str3]
sql_statement = array_of_strs.join('')
p sql_statement #=> "BEGIN hello.retrieve_card(:dog, :cat, :squirrel, :errormsg); END;"
join(separator = $,)
返回通過將數組的每個元素轉換爲由給定分隔符分隔的字符串創建的字符串。如果分隔符爲零,則使用當前$ ,.如果分隔符和$都是零,則它使用空字符串。
http://www.ruby-doc.org/core-2.2.0/Array.html#method-i-join
什麼是在軌道4,5相當於語法?
對我來說,它看起來像一個raw_connection應該能夠在這裏調用parse(),見線98,107:
:
https://github.com/rsim/oracle-enhanced/blob/8c1335658a864f93fe1e6b22a512d281677ee170/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb
該網頁上的類繼承自
class OracleEnhancedOCIConnection < OracleEnhancedConnection
...並且OracleEnhancedConnection類具有用於@raw_connection的屬性閱讀器,請參閱第17行:
https://github.com/rsim/oracle-enhanced/blob/8c1335658a864f93fe1e6b22a512d281677ee170/lib/active_record/connection_adapters/oracle_enhanced_connection.rb
是否由self.connection.raw_connection返回的raw_connection?嘗試:
puts self.connection.class
放self.class.connection.raw_connection.class回報:OCI8EnhancedAutoRecover」
的OCI8EnhancedAutoRecover
類定義如下:
https://github.com/rsim/oracle-enhanced/blob/8c1335658a864f93fe1e6b22a512d281677ee170/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb
...像這樣:
class OCI8EnhancedAutoRecover < DelegateClass(OCI8)
的OCI8EnhancedAutoRecover
類定義了一些方法 - 其中沒有一個是解析() - 和代表其他方法調用的OCI8類 - 這就是< DelegateClass(OCI8)
手段。
require "oci8"
...這需要ruby-oci8 gem
:
的OCI8類由提供。創業板在這裏定義的OCI8類:
https://github.com/kubo/ruby-oci8/blob/master/lib/oci8/oci8.rb
和在線168它定義了parse()方法:
def parse(sql)
@last_error = nil
parse_internal(sql)
end
所以調用解析()在raw_connection應該工作。
我得到這個「拒絕警告:#連接已棄用,有利於通過類訪問它。」當我嘗試把self.connection.class – Micheal 2015-01-20 21:33:40
@Micheal,然後:'puts self.class.connection.class' – 7stud 2015-01-20 21:39:10
你是對的。返回給我一個'ActiveRecord :: ConnectionAdapters :: OracleEnhancedAdapter' – Micheal 2015-01-20 21:42:32