Извлечение в Rails помощник - PullRequest
       4

Извлечение в Rails помощник

1 голос
/ 13 сентября 2010

Я хочу сделать эту вещь более общей.

<%= form_for :page, :url => { :action => :create } do |form| %>
<div class="tabs">
  <ul>
  <% languages.each_with_index do |lang, i| %>
    <li><a href="#tabs-<%= i+1 %>"><%= lang %></a></li>
  <% end %>
  </ul>

  <% languages.each_with_index do |lang, i| %>
  <div id="tabs-<%= i+1 %>">
  <fieldset class="inputs">
  <ol>
    <li><%= form.label fname("title", lang), "Title" %>
    <%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>

    <li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>

    <li><%= form.label fname("published", lang), "Publish?" %>
    <%= form.check_box fname("published", lang) %></li>
  </ol>
  </fieldset>
  </div>
  <% end %>
</div>

Она генерирует вкладку и поля формы для каждого языка.Мне нужны эти вкладки и для других форм, поэтому я хочу извлечь «логику» в помощника.Проблема в том, что я не знаю как.

<%= form_for :page, :url => { :action => :create } do |form| %>
<% language_tabs do |lang| %>
   <li><%= form.label fname("title", lang), "Title" %>
   <%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>

   <li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>

   <li><%= form.label fname("published", lang), "Publish?" %>
   <%= form.check_box fname("published", lang) %></li>
<% end %>
<% end %>

Ответы [ 3 ]

2 голосов
/ 13 сентября 2010

выглядит хорошим кандидатом на частичный шаблон. http://api.rubyonrails.org/classes/ActionView/Partials.html

Я только что понял, что вы действительно хотите :) Так что вы можете объединить партиалы и блокировать помощников, посмотрите:

http://snippets.dzone.com/posts/show/2483

Я выложу решение за 10 минут;)

Итак, вот ваше решение:

1) application_helper.rb (или любой другой подходящий вспомогательный файл) добавьте это:

def language_tabs(languages, &block) 
  tabs = []
  languages.each_with_index do |lang, i|
    tabs << render(:partial => 'tab', :locals => {:body => capture(lang, &block), :lang => lang, :i => i })
  end

  render(:partial => 'langtabs', :locals => {:languages => languages, :tabs => tabs})

end 

2) Частичное _langtabs.html.erb

<div class="tabs">
  <ul>
  <% languages.each_with_index do |lang, i| %>
    <li><a href="#tabs-<%= i+1 %>"><%= lang %></a></li>
  <% end %>
  </ul>

  <% tabs.each do |cTab| %>
    <%= cTab %>
  <% end %>

</div>

3) частичное _tab.html.erb

<div id="tabs-<%= i+1 %>">
<fieldset class="inputs">
<ol>
  <%= body %>
</ol>
</fieldset>
</div>

4) Ваша фактическая форма (примечание: в моем примере есть переменная с именем @ languages ​​!):

<%= form_for :page, :url => { :action => :create } do |form| %>
  <% language_tabs @languages do |lang| %>
     <li><%= form.label fname("title", lang), "Title" %>
     <%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>

     <li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>

     <li><%= form.label fname("published", lang), "Publish?" %>
     <%= form.check_box fname("published", lang) %></li>
  <% end %>
<% end %>

Grüsse

Simon

0 голосов
/ 13 сентября 2010

Чек Ячейки . Вы можете написать изолированные (при необходимости), инкапсулированные и повторно используемые компоненты со своей собственной логикой в ​​контроллере, похожем на контроллер (но гораздо легче). Хорошо работает с Rails 3.

0 голосов
/ 13 сентября 2010

Я не уверен, что это именно то, что вы хотите, но вот еще одно предложение:

Rails I18n: http://guides.rubyonrails.org/i18n.html

Вам не нужно делать помощника для этого,просто отдельные файлы yml для перевода для каждого языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...