Elixir 如何从 ecto 获取地图
Elixir how to get map from ecto
我想从 ecto 获得一个数据结构,它允许在我的 HTML 中迭代编写类似这样的东西:
<%= genders.name %>
所以我想我应该:
[{name: "Male", id: 1}, {name: "Female", id: 2}]
现在我的控制器运行很好
defmodule HexProjectWeb.LandingController do
use HexProjectWeb, :controller
alias HexProject.Gender
def index(conn, _params) do
genders = HexProject.Repo.all(Gender) |> Enum.map(&{&1.name, &1.id})
conn
|> assign(:genders, genders)
|> render("index.html")
#render conn, "index.html", genders: genders
end
end
但它 return 我这样的性别:
[{Male, 1}, {Female, 2}]
而且我不知道如何显示它。
所以我尝试了
genders = HexProject.Repo.all(
from g in Gender,
select: %{name: g.name, id: g.id}
)
它 return 我出错了
function HexProjectWeb.LandingController.init/1 is undefined (module HexProjectWeb.LandingController is not available)
编辑:完全错误
error rendering view
edit2: router.ex
defmodule HexProjectWeb.Router do
use HexProjectWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", HexProjectWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
get "/landing", LandingController, :index
resources "/genders", LandingController
end
# Other scopes may use custom stacks.
# scope "/api", HexProjectWeb do
# pipe_through :api
# end
end
感谢您的帮助。
您可以单独解决这些问题。
对于第一种方法,您应该:
genders = HexProject.Repo.all(Gender) |> Enum.map(&%{name: &1.name, id: &1.id})
对于第二种方法,您在控制器中构建查询,您应该在文件顶部添加导入,但在您的控制器定义中,例如:
defmodule HexProjectWeb.LandingController do
use HexProjectWeb, :controller
import Ecto.Query # add this line
alias HexProject.Gender
在您的第一次尝试中,您实际上是在构建一个元组,应该用正确的映射语法替换它(%{}
而不是 {}
)。
不幸的是,您遇到的第二个问题与您正在使用宏有关,实际上它与您的控制器中 from
功能不可用有关。
希望对您有所帮助!
我想从 ecto 获得一个数据结构,它允许在我的 HTML 中迭代编写类似这样的东西:
<%= genders.name %>
所以我想我应该:
[{name: "Male", id: 1}, {name: "Female", id: 2}]
现在我的控制器运行很好
defmodule HexProjectWeb.LandingController do
use HexProjectWeb, :controller
alias HexProject.Gender
def index(conn, _params) do
genders = HexProject.Repo.all(Gender) |> Enum.map(&{&1.name, &1.id})
conn
|> assign(:genders, genders)
|> render("index.html")
#render conn, "index.html", genders: genders
end
end
但它 return 我这样的性别:
[{Male, 1}, {Female, 2}]
而且我不知道如何显示它。
所以我尝试了
genders = HexProject.Repo.all(
from g in Gender,
select: %{name: g.name, id: g.id}
)
它 return 我出错了
function HexProjectWeb.LandingController.init/1 is undefined (module HexProjectWeb.LandingController is not available)
编辑:完全错误
error rendering view
edit2: router.ex
defmodule HexProjectWeb.Router do
use HexProjectWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", HexProjectWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
get "/landing", LandingController, :index
resources "/genders", LandingController
end
# Other scopes may use custom stacks.
# scope "/api", HexProjectWeb do
# pipe_through :api
# end
end
感谢您的帮助。
您可以单独解决这些问题。
对于第一种方法,您应该:
genders = HexProject.Repo.all(Gender) |> Enum.map(&%{name: &1.name, id: &1.id})
对于第二种方法,您在控制器中构建查询,您应该在文件顶部添加导入,但在您的控制器定义中,例如:
defmodule HexProjectWeb.LandingController do
use HexProjectWeb, :controller
import Ecto.Query # add this line
alias HexProject.Gender
在您的第一次尝试中,您实际上是在构建一个元组,应该用正确的映射语法替换它(%{}
而不是 {}
)。
不幸的是,您遇到的第二个问题与您正在使用宏有关,实际上它与您的控制器中 from
功能不可用有关。
希望对您有所帮助!