<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yuzizhang (张宇)</title>
    <link>https://ruby-china.org/yuzizhang</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>rails 中排序问题</title>
      <description>&lt;p&gt;第一个问题
ScenicArea.order("hot_spot desc").order("id asc") 生成的查询是 SELECT  &lt;code&gt;scenic_areas&lt;/code&gt;.* FROM &lt;code&gt;scenic_areas&lt;/code&gt; ORDER BY hot_spot desc, id asc
ScenicArea.order("hot_spot desc, id asc") 生成的查询是。SELECT  &lt;code&gt;scenic_areas&lt;/code&gt;.* FROM &lt;code&gt;scenic_areas&lt;/code&gt; ORDER BY hot_spot desc, id asc 
为什么是相同的 连续调用 order 后面的不应该覆盖前面的吗&lt;/p&gt;

&lt;p&gt;第二个问题
    post"/scenic_area/list" do
      check_params_sign
      &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = ScenicArea.publish
      if params[:city_id].present?
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = ScenicArea.by_city_id(params[:city_id])
        &lt;a href="/distance" class="user-mention" title="@distance"&gt;&lt;i&gt;@&lt;/i&gt;distance&lt;/a&gt; = 5000
      else
        &lt;a href="/distance" class="user-mention" title="@distance"&gt;&lt;i&gt;@&lt;/i&gt;distance&lt;/a&gt; = 50
      end
      if params[:order].present? &amp;amp;&amp;amp; params[:order].to_s == 'hot'
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.order" class="user-mention" title="@scenic_areas.order"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.order&lt;/a&gt;("hot_spot desc")
      else
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.order" class="user-mention" title="@scenic_areas.order"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.order&lt;/a&gt;(:distance)
      end
      if (params[:latitude].present? and params[:longitude].present?)
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.near" class="user-mention" title="@scenic_areas.near"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.near&lt;/a&gt;([params[:latitude],params[:longitude]],&lt;a href="/distance.to_i" class="user-mention" title="@distance.to_i"&gt;&lt;i&gt;@&lt;/i&gt;distance.to_i&lt;/a&gt;, units: :km)
      end
      &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.paginat" class="user-mention" title="@scenic_areas.paginat"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.paginat&lt;/a&gt;e(:per_page=&amp;gt;per_page,:page=&amp;gt;page)
      present({"code": 0,"msg": "ok", "data": {"scenic_areas": &lt;a href="/scenic_areas.collect" class="user-mention" title="@scenic_areas.collect"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.collect&lt;/a&gt;{|c|c.as_json(false)},"current_page": page,"total_pages": &lt;a href="/scenic_areas.total_p" class="user-mention" title="@scenic_areas.total_p"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.total_p&lt;/a&gt;ages}})
    end
这样写返回的结果是我想要的按照热度排序的结果 
    post"/scenic_area/list" do
      check_params_sign
      &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = ScenicArea.publish
      if params[:city_id].present?
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = ScenicArea.by_city_id(params[:city_id])
        &lt;a href="/distance" class="user-mention" title="@distance"&gt;&lt;i&gt;@&lt;/i&gt;distance&lt;/a&gt; = 5000
      else
        &lt;a href="/distance" class="user-mention" title="@distance"&gt;&lt;i&gt;@&lt;/i&gt;distance&lt;/a&gt; = 50
      end
      if (params[:latitude].present? and params[:longitude].present?)
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.near" class="user-mention" title="@scenic_areas.near"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.near&lt;/a&gt;([params[:latitude],params[:longitude]],&lt;a href="/distance.to_i" class="user-mention" title="@distance.to_i"&gt;&lt;i&gt;@&lt;/i&gt;distance.to_i&lt;/a&gt;, units: :km)
      end
      if params[:order].present? &amp;amp;&amp;amp; params[:order].to_s == 'hot'
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.order" class="user-mention" title="@scenic_areas.order"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.order&lt;/a&gt;("hot_spot desc")
      else
        &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.order" class="user-mention" title="@scenic_areas.order"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.order&lt;/a&gt;(:distance)
      end
      &lt;a href="/scenic_areas" class="user-mention" title="@scenic_areas"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas&lt;/a&gt; = &lt;a href="/scenic_areas.paginat" class="user-mention" title="@scenic_areas.paginat"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.paginat&lt;/a&gt;e(:per_page=&amp;gt;per_page,:page=&amp;gt;page)
      present({"code": 0,"msg": "ok", "data": {"scenic_areas": &lt;a href="/scenic_areas.collect" class="user-mention" title="@scenic_areas.collect"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.collect&lt;/a&gt;{|c|c.as_json(false)},"current_page": page,"total_pages": &lt;a href="/scenic_areas.total_p" class="user-mention" title="@scenic_areas.total_p"&gt;&lt;i&gt;@&lt;/i&gt;scenic_areas.total_p&lt;/a&gt;ages}})
    end
这样把 order 排序放在后面反而不会按照热度排序 返回的是按照距离排序的结果 
这两个问题都不是很清楚 希望有懂的帮我解答一下&lt;/p&gt;</description>
      <author>yuzizhang</author>
      <pubDate>Mon, 29 Jul 2024 19:09:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/43828</link>
      <guid>https://ruby-china.org/topics/43828</guid>
    </item>
  </channel>
</rss>
