이 실제로 그래서 기본적으로는이이 self.My
후 모든 코멘트를하게한다는 것을 의미 한 줄에 있다는 사실
def MyColumn; self.My#Column; end
def MyColumn?; self.My#Column?; end
def MyColumn=(val); self.My#Column= val; end
공지되고
Source
module_eval <<-STR, __FILE__, __LINE__ + 1
def #{new_name}; self.#{old_name}; end # def subject; self.title; end
def #{new_name}?; self.#{old_name}?; end # def subject?; self.title?; end
def #{new_name}=(v); self.#{old_name} = v; end # def subject=(v); self.title = v; end
STR
을 무엇을하고 있는지
alias_attribute
입니다 (
end
포함) 오류가 발생합니다.
rails
ruby
의 단일 행이 아니더라도
#Column
부분을 주석으로 처리하기 때문에
My
이 메소드가 아니므로 간단히
NoMethodError
을 발생시킵니다.
ActiveModel#alias_attribute
여기
def define_proxy_call(include_private, mod, name, send, *extra)
defn = if NAME_COMPILABLE_REGEXP.match?(name)
"def #{name}(*args)"
else
"define_method(:'#{name}') do |*args|"
end
extra = (extra.map!(&:inspect) << "*args").join(", ".freeze)
target = if CALL_COMPILABLE_REGEXP.match?(send)
"#{"self." unless include_private}#{send}(#{extra})"
else
"send(:'#{send}', #{extra})"
end
mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
#{defn}
#{target}
end
RUBY
end
처럼 보이는 define_proxy_call
를 통해 동일한의 기능 구현이 당신이 실제로 확인합니다 볼 수 있기 때문에 이것은 또한 이상한 것 같다 경우 새 이름 (name
)과 원래 이름 (send
)는 "준수 가능"하며 적합하지 않으면 적합합니다.
alias_attribute
보다는 본질적으로 주석 문자와 관련된 문제가 있습니다. public_send
을 사용하여 수동으로 구현하는 것이 좋습니다.
def MyColumn
self.public_send("My#Column")
end
def MyColumn=(val)
self.public_send("My#Column=",val)
end
def MyColumn?
self.public_send("My#Column?")
end
결과는 동일하지만 구문 문제는 발생하지 않습니다.
설명해 주셔서 감사합니다. 나는 한두 가지를 배웠다. 그리고 효과가있었습니다. 건배! – JosephGage