我正在学习Phoenix和Elixir,我来自Ruby/Rails,我在REPL中工作,pry用来检查我的数据库和应用程序状态.
我正试图弄清楚如何在Phoenix应用程序中与我的数据库和模型进行交互.我知道iex,但我不知道如何使用它从repl检查我的应用程序的数据库.我是否需要每次从repl使用ecto连接到它?有没有rails console等价物.我检查了Phoenix文件,Elixir Dose和Ecto repo,但找不到我要找的东西.我错过了什么吗?
编辑:根据下面的答案,我发现了ecto文档的这一部分.基于此我可以做类似的事情ArticlesApi.Repo.all ArticlesApi.Article
我有一个upsert要求,所以我需要调用postgres存储过程或使用公用表表达式.我还使用pgcrypto exgtension进行密码,并希望使用postgres函数(例如"crypt"来编码/解码密码).
但是我无法找到一种方法让Ecto部分或全部使用原始sql,它是否意味着ecto只支持elixir dsl并且当dsl不够时不允许shell-out到原始sql?
我发现我可以通过适配器查询(Rocket是应用程序的名称)
q = Ecto.Adapters.Postgres.query(Rocket.Repo,"select * from users limit 1",[])
Run Code Online (Sandbox Code Playgroud)
但不确定如何将其转化为模型.我是elixir的新手,似乎我应该可以使用Ecto.Model.Schem.schema/3但是失败了
Rocket.User.__schema__(:load,q.rows |> List.first,0)
** (FunctionClauseError) no function clause matching in Rocket.User.__schema__/3
Run Code Online (Sandbox Code Playgroud) 我想使用Postgres使用Ecto存储一个浮点值数组.我正在使用Ecto与Phoenix Framework和Elixir.
我如何为此定义模型和迁移?
我没有尝试太多,除了搜索网络,没有找到任何有用的东西:-(
我尝试使用如下模式定义模型:
schema "my_model" do
field :my_array, :array
timestamps
end
Run Code Online (Sandbox Code Playgroud)
出现错误"无效或未知类型:字段数组:my_array"
有没有人知道(或可以提供)如何使用ecto DSL更改表列名称的示例
我猜我只是使用mix ecto.gen.migration然后我会用我的自定义代码填写空的创建文件(如果是这样,你将如何编辑列名,文档显示修改以更改列类型)
或者是否有一个命令行标志我可以传递给我生成迁移代码?
我正在阅读以下教程,试图了解一下elixir和phoenix:
https://robots.thoughtbot.com/testing-a-phoenix-elixir-json-api
我遇到了测试问题,主要是使用Poison.encode!在Contact模型上.我收到以下错误:
unable to encode value: {nil, "contacts"}
Run Code Online (Sandbox Code Playgroud)
这导致我出现以下问题:
https://github.com/elixir-lang/ecto/issues/840 和修复:https: //coderwall.com/p/fhsehq/fix-encoding-issue-with-ecto-and-poison
我已将博客文章中的代码添加到lib/poison_encoder.ex中,但我现在收到以下错误:
no function clause matching in Poison.Encoder.Any.encode/2
Run Code Online (Sandbox Code Playgroud)
我在lib/poison_encoder.ex中的代码:
defimpl Poison.Encoder, for: Any do
def encode(%{__struct__: _} = struct, options) do
map = struct
|> Map.from_struct
|> sanitize_map
Poison.Encoder.Map.encode(map, options)
end
defp sanitize_map(map) do
Map.drop(map, [:__meta__, :__struct__])
end
end
Run Code Online (Sandbox Code Playgroud) 我在理解changeset模型时遇到问题.它能做什么?我们可以在一个模型中拥有多个变更集吗?例如一个用于创建,另一个用于更新.
有人可以用简单的方式详细说明,这样可以帮助其他人来凤凰城.
我有一个用户模型和一个聊天模型.直观地,多个人将在任何时间属于同一个聊天组,每个人可以拥有许多聊天组.因此聊天组必须属于多个人user_id的.
我的聊天组和用户的架构是:
schema "chatGroups" do
field :name, :string
has_many :messages, Message
belongs_to :user, User
timestamps
end
schema "users" do
field :name, :string
has_many :chatGroups, ChatGroup
timestamps
end
Run Code Online (Sandbox Code Playgroud)
任何建议如何处理这个?
如何在Ecto中的两列上创建唯一索引,这对应于:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
primary key (col1, col2)
)
Run Code Online (Sandbox Code Playgroud)
?
我有一个Ecto.Query和一个Repo,这样我就可以打电话Repo.all(query)并获得结果.但是,结果并不是我所期望的.
如何查看Repo将从中生成的原始SQL Ecto.Query?