PG :: InvalidColumnReference:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中

时间:2016-12-21 14:54:00

标签: ruby-on-rails ruby postgresql distinct

我在Postgres sql的生产中遇到了一个问题,它有一个不同的限制顺序。看看类似的问题,我似乎没有找到冲突的明确顺序。

我按日期desc显示当前用户订单的所有报告。然后我创建了过滤器,以便用户可以过滤报表中的特定属性。在过滤器中选择我使用DISTINCT仅显示uniq值。以下两个属性“target_species”和“tide”正在创建

是冲突,因为我按日期DESC显示所有报告,然后在过滤器中单独使用DISTINCT?

reports_controller.rb

    def index
      @reports = current_user.reports.order("date DESC")
      @reports_for_filter = @reports.select("DISTINCT(target_species)")
      @reports_for_filter_tide = @reports.select("DISTINCT(tide)")
    end

    def filter
      @target_species = params[:target_species] unless params[:target_species].blank?
      @tide = params[:tide] unless params[:tide].blank?

    # for uniq
      @reports = current_user.reports.order("date DESC")
      @reports_for_filter = @reports.select("DISTINCT(target_species)") #sets up target_species for filter box
      @reports_for_filter_tide = @reports.select("DISTINCT(tide)")

      @reports = @reports.selected_species(@target_species) if @target_species
      @reports = @reports.selected_tide(@tide) if @tide

    end

报告视图 index.html.erb

    <div class="col-sm-3">
      <label>Species</label><br>
      <select id="target_species" name="target_species" class="form-control m-b">   
          <option value="">Select Species</option>
            <% @reports_for_filter.each do |report| %>
            <% puts "target species is #{report.target_species}".green %>
          <option value="<%= report.target_species %>"><%= report.target_species %>
          </option>
            <% end %>
      </select>
    </div>
    <div class="col-sm-3">
      <label>Tide</label><br>
        <select id="tide" name="tide" class="form-control m-b">   
          <option value="">Select Tide</option>
            <% @reports_for_filter_tide.each do |report| %>
          <option value="<%= report.tide %>" <%= selected_tide(report.tide) %>><%= report.tide %>
          </option>
            <% end %>
        </select>
    </div>

    <script>
      $('#target_species').change(function(){
        $('#filter_form').submit();
      });
       $('#tide').change(function(){
        $('#filter_form').submit();
      });
    </script>

report.rb

belongs_to:location         belongs_to:user

    scope :selected_species, -> (the_species) { where(target_species: the_species)}

    scope :selected_tide, -> (the_tide) {where(tide: the_tide)}

0 个答案:

没有答案