Группировать по годам, используя Postgres - PullRequest
0 голосов
/ 26 сентября 2018

Я ищу группу по году только в поле даты create_at.Я использую postgres и нахожу его отличным от использования Mysql.

Я хочу отображать только годы и использовать их в параметре поиска.

Я получаю следующееошибка: missing attribute: created_at

Форма для поиска

<%= form_tag(page_path, method: :get) do %>
  <%= select_tag :select_year, options_for_select(@years.map { |m| m.created_at.year }) %>
  <%= submit_tag 'Search', name: nil %>
<% end %>

Контроллер (индекс)

@trials = if params[:select_year]
  Product.where('extract(year from created_at) = ?', "#{params[:select_year]}")
  else
  Product.where('extract(year from created_at) = ?', Time.now.year))
  end

@years = Product.group('extract(year from created_at)').order('extract(year from created_at) DESC').select('extract(year from created_at)')

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Product # Index

def index
  #.....
  #Performance point of view
  @years_arrays = Product.order('extract(year from created_at) DESC').pluck('DISTINCT extract(year from created_at)')
end

просмотреть форму поиска

<%= form_tag(page_path, method: :get) do %>
  <%= select_tag :select_year, options_for_select(@years_arrays) %>
  <%= submit_tag 'Search', name: nil %>
<% end %>
0 голосов
/ 26 сентября 2018

Вам не хватает as в вашем выборе,

.select('extract(year from created_at) AS created_at_year')

, тогда вы можете позвонить @years.map(&:created_at_year)

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