Создание помощника для кнопок вывода - PullRequest
0 голосов
/ 02 ноября 2010

Я хотел бы вывести кнопку формы:

<% content_tag :button :type => :submit, :class => :positive do %>
   <%= image_tag "icons/tick.png"%>
   Save
<% end %>

Что должно генерировать:

<button type="submit" class="positive">
    <img src="/images/icons/tick.png" alt=""/> 
    Save
</button>

У меня есть это по всему сайту, оно становится грязным, и я только что узнал, что в Rails есть вспомогательные методы. Мне было любопытно. Можно ли построить вспомогательный метод, чтобы я мог просто сказать что-то подобное в rails

<%= form_button(submit) %>

Что ты думаешь? Будет ли это жить в файле application_helper.rb?

Что-то вроде:

def form_button (type)
  if type == 'submit'
      <% content_tag :button :type => :submit, :class => :positive do %>
      <%= image_tag "icons/tick.png"%>
      Save          
      <% end %>
  end
end

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Чтобы ответить на ваш первый вопрос: да, это возможно, и это то, что поощряет среда Rails: повторное использование кода (иначе известный как принцип DRY). Специально для просмотра логики, есть помощник для каждой вашей модели. Это стандартное соглашение / соглашение, хотя вы не должны придерживаться этого . Я объясню больше об этом в следующем параграфе. Так что да, поместите ваш form_button метод в a помощник - не обязательно application_helper.rb.

Чтобы ответить на ваш второй вопрос: вы можете вставить его в application_helper.rb, но ничто не мешает вам сделать вещи немного более логичными (то есть, создав buttons_helper.rb). В частности, в Rails 3 все помощники доступны для каждого вида (хотя это несколько раздражало). Поэтому вместо этого вы можете создать для себя нового помощника (т. Е. rails g helper Buttons), специально для создания кнопок, и поместить туда свою логику.

Взгляните на это Railscast . Это описывает более подробно именно то, что я сказал выше. У меня был тот же вопрос, и он мне очень помог. http://railscasts.com/episodes/101-refactoring-out-helper-object

0 голосов
/ 02 ноября 2010

Если помощник будет находиться вокруг сайта, то приложение, вероятно, является лучшим местом для помощников.

Вы можете делать то, что у вас есть, вам не нужно помещать теги <%%>, так как они предназначены для erb Embeded Ruby, которые являются вашими расширениями представления, а помощники просто .rb, поэтому в этом нет необходимости .

Я проверил API и похоже, что вам не нужно для этого назначать своего собственного помощника:

content_tag(:p, "Hello world!")
   # => <p>Hello world!</p>
content_tag(:div, content_tag(:p, "Hello world!"), :class => "strong")
   # => <div class="strong"><p>Hello world!</p></div>
content_tag("select", options, :multiple => true)
   # => <select multiple="multiple">...options...</select>

Лучший способ сделать это - применить изображение в качестве фонового изображения в вашей таблице стилей или сделать его встроенным. Вам не нужно создавать помощника для этого и, кстати, что произойдет, если тип не «submit»? У вас есть другие входы для проверки или по умолчанию? Если нет, то нет смысла оборачивать его в помощника.

так что вы можете сделать это "

<% submit_tag "Save", :class => "your_class", :style => "font-size:10px;"%>

или

<% f.submit "Save", :class => "your_class", :style => "font-size:10px;"%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...