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/
我是 [菜鸟] 玩弄 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/