Phoenix:排序查询集

Phoenix: Ordering a query set

我是 [菜鸟] 玩弄 Phoenix 框架的乐趣,并构建了一个小型的 Twitter 克隆。我一切正常,但是,我想按 updated_at 字段(升序)对推文进行排序。正如您从 tweet_controller 中看到的那样,我尝试过使用 order_by 子句,但这对我没有任何帮助。

问题

如何实现?在 EEx 内还是在 tweet_controller 本身内?

tweet/index.html.eex

<div class="row">
  <%= for tweet <- @tweets do %>

  <h4><%= tweet.tweet %></h4>

  <% end %> 
</div>

controllers/tweet_controller.ex

...
alias TodoApp.Tweet

def index(conn, _params) do
  tweets = Repo.all(Tweet, order_by: tweet)
  render(conn, "index.html", tweets: tweets)
end
...

您需要使用 Ecto Query:

query = from(t in Tweet, order_by: t.updated_at)
tweets = Repo.all(query)

您可能需要考虑在您的推文模型中为查询定义一个函数。

def ordered(query) do
  from t in query,
    order_by: t.updated_at
end

您也可以使用函数语法:

def ordered(query) do
  query
  |> order_by([t], t.updated_at)
end

然后你可以在你的控制器中使用它:

tweets = Tweet |> Tweet.ordered() |> Repo.all()

这是一个很好的post查询:http://blog.drewolson.org/composable-queries-ecto/