2012-02-28 35 views
8

Làm cách nào để động nhận giá trị thuộc tính cho đối tượng activerecord?Tự động nhận thuộc tính của đối tượng

ví dụ: Tôi có một biến có tên là attr_name.
tôi muốn làm một cái gì đó như thế này:

person = Person.find(1) 
attr_name = "address" 
address = person.<function_name>(attr_name) 

function_name có thể được sử dụng?

Trả lời

3

send là phương pháp bạn đang tìm kiếm.

+4

tùy nơi tên hàm xuất phát từ, điều này có thể khá nguy hiểm, vì vậy tôi sẽ không làm điều đó –

22

Hoặc sử dụng person.attributes[attr_name] hoặc person.read_attribute(att_name) hoặc thậm chí ngắn hơn thì đây là person[attr_name].

+3

Đây là cách an toàn nhất và chính xác. Lưu ý rằng điều này sẽ chỉ làm việc cho các thuộc tính, không phải các phương thức khác hoặc các liên kết. –

+0

Không thể nhận các thuộc tính hoặc phương thức với cú pháp 'biểu tượng [hoặc chuỗi]'. Tạo một lớp đơn giản và làm cho một số biến hoặc phương thức có thể truy cập công khai với cú pháp dấu chấm đầu tiên để xem nó hoạt động, sau đó thử truy cập nó thông qua biểu tượng hoặc chuỗi .. không hoạt động. –

+0

'' ' lớp Foo def khởi @foo = 'tên foo' @bar = 'Tên bar' cuối def foo @foo cuối cuối foo = Foo.new foo [: foo] '' ' –

1

Nếu làm điều này bằng send

address = person.send("function_name" + "attr_name") 
Các vấn đề liên quan