2013-09-03 24 views
8

Tôi mới trong ruby ​​trên đường ray trong khi đi qua đường ray mã tôi phát hiện ra rằnggì đang attr_internal sử dụng cho

attr_internal :response_body 
    attr_internal :action_name 
    attr_internal :formats 

gì là nó nó làm gì? tại sao họ sử dụng attr_internal cho công văn gửi cho tên phản ứng hoặc tên hành động?

Trả lời

0

Nó khai báo trình đọc thuộc tính và tác giả được hỗ trợ bởi một biến mẫu được đặt tên bên trong.

http://rubydoc.info/docs/rails/Module:attr_internal nhìn vào này

Nhìn file chính cho nó

https://github.com/rails/docrails/blob/master/activesupport/lib/active_support/core_ext/module/attr_internal.rb

def attr_internal_define(attr_name, type) 
    internal_name = attr_internal_ivar_name(attr_name).sub(/\[email protected]/, '') 
    class_eval do # class_eval is necessary on 1.9 or else the methods a made private 
    # use native attr_* methods as they are faster on some Ruby implementations 
    send("attr_#{type}", internal_name) 
    end 
    attr_name, internal_name = "#{attr_name}=", "#{internal_name}=" if type == :writer 
    alias_method attr_name, internal_name 
    remove_method internal_name 
end 


# use native attr_* methods as they are faster on some Ruby implementations 
    send("attr_#{type}", internal_name) 

đây các thủ thuật

+0

bạn có thể giải thích thêm cho tôi không –

4

Cần nhận thấy rằng Rails cung cấp attr_internal này để ngăn chặn xung đột tên khi phân lớp. Vì vậy, khi phương thức cá thể đọc và ghi attr_internal :variable được tạo, cái sau được truy cập bởi @_variable, để khi bạn phân lớp với một số attr_accessor :variable, không có va chạm tên nào là có thể! Xem doc để biết thêm thông tin