/ / Рефактор метод за намиране на записи по статус - ruby-on-rails, ruby, ruby-on-rails-3.2, ruby-on-rails-4

Рефакторен метод за намиране на записи по състояние - рубинки на релси, рубин, рубин на релси-3.2, рубинки на релси-4

В момента използвам .find_by_status (params [: status]) на моя @tasks, за да намеря задачи, които не са затворени или лепкави (4,5).

def self.find_by_status(status)
status = status.to_i
if status == 0 then
status = 1
else
status = status
end
if status == 1 || !status then
Task.where(["STATUS NOT IN (4,5)"])
else
Task.where(:status => status)
end
end

Също така копирах това за модела на билетите, за да намеря само отворени билети на началната страница.

Това също е придружено от това

<% status_active = 1 %>
<% Task.new.statuses.each do |status| %>
<li class="<%= if (params[:status].to_i || status_active) == status[0] then "active" end %>">
<%= link_to status[1], :controller => params[:controller], :action => params[:action], :params => { :status => status[0] } %>
</li>

Аз съм нов за релсите и наистина се боря за това. Вероятно бих предпочел да направя тези връзки в падащ филтър, но също така се боря.

Всяка помощ е оценена!

Отговори:

1 за отговор № 1

Този фрагмент:

def self.find_by_status(status)
if status.to_i.zero?
Task.where(["STATUS NOT IN (4,5)"])
else
Task.where(:status => status.to_i)
end
end

Е идентичен с горния Ви код (няма начин този статус да е невярен, след като сте го подали to_i).

Можете да почистите кода за преглед до:

<% Task.new.statuses.each do |status| %>
<li class="<%= "active" if (params[:status].to_i || Task::STATUS_ACTIVE) == status[0] %>">
<%= link_to status[1], :controller => params[:controller], :action => params[:action], :params => { :status => status[0] } %>
</li>
<% end %>

Предлагам да добавите STATUS_ACTIVE като константа във вашия модел, вместо да го кодирате в изгледа.

Също така, фактът, че определяте контролерите и действията чрез param е странно, но без да знаете повече за вашата употреба, не мога да отстраня това.