2013-09-03 12 views
8

Jestem nowy w Ruby on Rails podczas przejść przez kod szyn stwierdziliśmy, żeco attr_internal wykorzystywane do

attr_internal :response_body 
    attr_internal :action_name 
    attr_internal :formats 

co to jest co to robi? dlaczego używali attr_internal do wysyłania akcji do treści odpowiedzi lub nazwy działania?

Odpowiedz

0

Deklaruje atrybut czytnik i program piszący wspierany przez wewnętrznie nazwaną zmienną instancji.

http://rubydoc.info/docs/rails/Module:attr_internal spojrzenie na ten

Spójrz główny plik za nim

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) 

tu sztuczki

+0

czy możesz mi wyjaśnić więcej –

4

Należy zauważyć, że Rails oferuje ten attr_internal aby zapobiec nazwa konfliktu przy podklasowaniu. Tak więc, gdy tworzona jest instancja odczytu i zapisu instancji attr_internal :variable, ta ostatnia jest dostępna przez @_variable, więc gdy podklasę zawierasz attr_accessor :variable, kolizja nazw nie jest możliwa! Aby uzyskać więcej informacji, zobacz doc

Powiązane problemy