레일스에 익숙하지 않아 커스텀 폼 요소를 추가하는 표준 방법이 무엇인지 알아 내려고합니다. 현재 내가하고있는 방식은 슈퍼 grotty입니다.레일에있는 사용자 정의 폼 요소
module ActionView
module Helpers
module FormOptionsHelper
def some_new_field(object, method, options = {}, html_options = {})
#code code
end
end
class FormBuilder
def contract_year_select(method, options = {}, html_options = {})
@template.some_new_field(@object_name, method, objectify_options(options), @default_options.merge(html_options))
end
end
end
end
그러나 나는 이것을 보았습니다. FormBuilder 확장
(here에서)
class Forms::ApplicationFormBuilder < ActionView::Helpers::FormBuilder
Forms::ApplicationHelper.instance_methods.each do |selector|
src = <<-end_src
def #{selector}(method, options = {})
@template.send(#{selector.inspect}, @object_name, method, objectify_options(options))
end
end_src
class_eval src, __FILE__, __LINE__
end
private
def objectify_options(options)
@default_options.merge(options.merge(:object => @object))
end
end
는 펀칭 오리보다 더 나은 솔루션처럼 보인다. FormBuilder 클래스의 일부를 내 사용자 정의 파일에 직접 복사 할 필요가없는 다른 방법이 있습니까? 여기
처음으로 나는 오리 펀치라는 용어를 보았습니다. 나는 그것을 사랑한다! –
패트릭 유잉 (Patrick Ewing)의 인용문에서 비롯된 것 "글쎄, 나는 아담에게 완전히 팔렸다. 마치 오리처럼 걷고 오리처럼 말하면 오리 일 뿐이라는 생각이 들었다. 그렇다면이 오리가 너에게 당신이 원하는 소음, 당신은 당신이 기대하는 것을 돌려 줄 때까지 오리를 펀치해야합니다. " – baudtack