рдордЬрдмреВрд░ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЖрд╕рд╛рди рд▓реЗрдЖрдЙрдЯ: рд╕рд╣рд╛рдпрдХ, рд╕рдЬреНрдЬрд╛рдХрд╛рд░, рдлрд╛рд░реНрдо рддрддреНрд╡

рдХрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╣реЗрд░рдлреЗрд░ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдбреЗрдХреЛрд░реЗрдЯрд░ , рдХрд╕реНрдЯрдо рдлреЙрд░реНрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ , рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рд┐рд░реНрдл рд╣реЗрд▓реНрдкрд░реНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рджреГрд╢реНрдп рдлрд╛рдЗрд▓реЗрдВ рдмреЗрд╣рддрд░ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд░реВрдк рддрддреНрд╡ рдФрд░ рд╕рд╣рд╛рдпрдХ рдмрд╕ рдЕрд╕рд╣рдиреАрдп рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдФрд░ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ ...



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PriceRangeInput рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ PriceRangeInput ред

 class PriceRangeInput < SimpleForm::Inputs::Base def input output = template.content_tag(:div, class: 'j-price-slider') do div = '' div << template.content_tag(:div, class: 'row') do row = "" row << template.content_tag(:span, class: 'span3') do @builder.input(:min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'}) end row << template.content_tag(:span, class: 'span3') do @builder.input(:max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'}) end row.html_safe end div << template.content_tag(:div, class: 'row') do template.content_tag(:span, class: 'span6') do template.content_tag(:div, class: 'j-slider', :data => :slider_data) do end end end div.html_safe end output.html_safe end end 

рдпрд╣ рддрддреНрд╡ рдлрд╝реЙрд░реНрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

 = simple_form_for current_search_form, :url => :search, :method => "get" do |f| = f.input :price_range, :label => false, :as => :price_range 

рд▓реЗрдХрд┐рди рдлреЙрд░реНрдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ


рд╕рдорд╛рдзрд╛рди Arbre - Ruby Object Orient HTML Views рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдпрд╣ рдХреЛрдб рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред Arbre рдХрд╛ рдЬрдиреНрдо acive_admin рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реБрдЖ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдиреАрдВрд╡ рд╣реИред

рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдБрдЪреЛ


рдЖрдЗрдП рдлрд╛рд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдмрдВрджрд░ рдкреИрдЪ рдХреЗ рджреБрд░реНрд▓рдн рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

 class SimpleForm::Inputs::Base private def arbre assigns={}, &block Arbre::Context.new assigns.reverse_merge(:builder=>@builder), template, &block end end 

рдЕрдм рд╣рдо рдлрд╛рд░реНрдо рддрддреНрд╡ рдХреЛ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  def input arbre slider_data: slider_data do div class: 'j-price-slider' do div class: 'row' do span class: 'span3' do builder.input :min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'} end span class: 'span3' do builder.input :max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'} end end div class: 'row' do span class: 'span6' do div class: 'j-slider', data: slider_data end end end end end 

рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдХреЗрд╡рд▓ рд╡рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХреЛрдб рдЕрдЪреНрдЫреЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред

рдЕрд░реНрдм рдХреЗ рд▓рд╛рдн


рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред

1. рдЙрдкрдпреЛрдЧ
Arbre
рдЖрдк рдЙрддреНрдкрдиреНрди рдЯреИрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 #  buffer = '' buffer << template.content_tag(:div, class: 'row') do ... buffer << template.content_tag(:div, class: 'row') do buffer.html_safe #  div class: 'row' do ... div class: 'row' do ... 

2. рдпрд╣ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЬрдВрдХ content_tag рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЯреИрдЧ рдХреЛ рд╕реАрдзреЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 #  template.content_tag(:div, class: 'row') #  div class: 'row' 

3. рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдШрдЯрдХ рд╣реИрдВред

рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдШрдЯрдХ


рдПрдХ рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Arbre рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

 class Row < Arbre::Component builder_method :row def build(title, attributes = {}) super(attributes.merge class: 'row') end end 


рдШреЛрд╖рдгрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдпрд╣ рдШрдЯрдХ рдЕрдореНрдмреНрд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

 template.content_tag(:div, class: 'row') do ... 

рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

 row do ... 

рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:

  <div class="row"> ... 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрд░реНрдмрд░ рдХреЛрдб рдореЗрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп - рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In184528/


All Articles