Refactor Rails 3 views - переместить логику в <model>_helper - PullRequest
0 голосов
/ 13 декабря 2010

Я хотел бы переместить следующее из моего представления в связанный помощник модели:

<%= link_to_unless params[:aged]=='0', "0", jobs_path(:aged => '0', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='30', "30", jobs_path(:aged => '30', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='60', "60", jobs_path(:aged => '60', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='90', "90", jobs_path(:aged => '90', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %>

Я пробовал это, но это вызывает НЕОЖИДАННУЮ ошибку ИДЕНТИФИКАТОРА (очевидно, мне нужно объединить результаты link_to_unless с '|'):

link_to_unless params[:aged]=='0', "0", users_path(:aged=>'0',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='30', "30", users_path(:aged=>'30',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='60', "60", users_path(:aged=>'60',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='90', "90", users_path(:aged=>'90',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav])

Кажется, мне нужно вставить результаты этих вспомогательных методов в поток HTML, но я не уверен в лучшем подходе.

Теперь, когда в Rails 3 все помощники все время (помощники: все), есть ли способ указать виду модели использовать только помощника, связанного с моделью? На этом этапе я добавляю имя модели в имя функции - например, 'jobs_sorted_column'.

** редактировать **

Refactored

jobs_helper:

  def posted_filter(bucket)

    link_to_unless params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir])

  end

вид:

[ <% ['0','30','60','90'].each do |bucket| %>
    <%= posted_filter(bucket) %> |
<% end %> ]

Вопросы:

  • Результирующий вывод выглядит как [0 | 30 | 60 | 90 | ]. Есть ли простое исправление для удаления 4-го '|'?
  • Похоже, что был бы более элегантный способ передачи параметров в маршрут, включая одно "переопределенное" значение (в моем примере это сообщение:> bucket, в моем примере).

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Попробуйте использовать collect и join, что-то вроде:

<%= ['0','30','60','90'].collect{ |x| "#{posted_filter(x)}" }.join(' | ') %>

См .: Массив # собирать

1 голос
/ 20 декабря 2010

Вы можете сделать это еще лучше:

def posted_filters(*args)
  args.collect { |bucket|
    link_to_unless(params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir]))
  }.join(' | ').html_safe
end

А на ваш взгляд код:

[ <%= posted_filters(0, 30, 60, 90) %> ]
...