Tôi đã sử dụng ActiveRecord::Base.set_table_name
để đặt tên bảng của mình trên lớp ActiveRecord được tạo động. Bây giờ tôi cần phải biết làm thế nào để có được giá trị đó sau này. Các tài liệu api không đề cập đến bất cứ điều gì về cách làm điều này. Ngoài ra, tôi không thể lấy tên bảng ra khỏi tên lớp ActiveRecord vì chúng được khóa khác với tên bảng.Lấy tên bảng từ ActiveRecord
Dưới đây là một ví dụ tốt về những gì tôi đang làm
table_klass = Class.new(ActiveRecord::Base)
ActiveRecord::Base.const_set(const_name,table_klass)
app = @app
table_klass.class_eval do
after_save do
@@channel.push self
end
set_table_name t.server_table
establish_connection(
:adapter => "mysql2",
:host => app.db_host,
:username => app.db_user,
:password => app.db_pass,
:database => app.db_name
)
end
Trong trường hợp này, nếu const_name
= Test và tên cơ sở dữ liệu Cơ sở dữ liệu là cần tạo ra một lớp của ActiveRecord :: Base :: DatabaseTest, mà nó làm. Nhưng khi tôi gọi table_name trên nó tôi nhận được biến địa phương hoặc phương pháp không xác định. Tôi có cần gọi tên nhóm trên lớp không?
Cập nhật: tôi nhận nó làm việc bằng cách gọi instance.class.table_name
Tôi đã cố gắng này, nó nói phương pháp xác định. Tôi nên rõ ràng hơn một chút. Tôi đang metaprogramming việc tạo ra lớp này. Tôi đang thêm một ví dụ rõ ràng hơn cho câu hỏi của tôi – MobileOverlord
Ah, xin lỗi, tôi là một chút ra khỏi chiều sâu của tôi với nhiều meta. Tất cả những gì tôi có thể nói với bạn là 'table_name' là một phương thức lớp trên' ActiveRecord :: Base' (và do đó các lớp dẫn xuất của nó), thu được từ 'ActiveRecord :: ModelSchema :: ClassMethods'. – Chowlett