我有一个架构:
schema "editables" do
field :title, :string
field :content, :string
timestamps
end
Run Code Online (Sandbox Code Playgroud)
现在我想将一个字段表单的类型更改:integer为:binary.编写迁移的正确方法是什么,因为使用add不起作用......?
def change do
alter table(:editables) do
add :title, :binary
add :content, :binary
timestamps
end
end
Run Code Online (Sandbox Code Playgroud) 我无法创建我的凤凰项目.会喜欢一些关于如何修复它的建议.
设置细节:
我正在关注Phoenix Up and Running制作应用程序.
mix phx.new hello
cd hello
mix ecto.create
Run Code Online (Sandbox Code Playgroud)
最后一个命令给了我:
== Compilation error in file lib/hello/repo.ex ==
** (ArgumentError) adapter Ecto.Adapters.Postgres was not compiled, ensure it is correct and it is included as a project dependency
lib/ecto/repo/supervisor.ex:71: Ecto.Repo.Supervisor.compile_config/2
lib/hello/repo.ex:2: (module)
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:206: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
Run Code Online (Sandbox Code Playgroud)
我安装了postgres.我有postgres超级用户.
几天前,我开始使用Elixir和Phoenix Framework(v 0.12.0)和Postgres数据库.我正在尝试创建一个具有UUID主键的表,我更喜欢顺序默认值.
在使用mix phoenix.gen.html生成模型和迁移文件并遵循Phoenix文档中的其他步骤之后,我已经更改了
def model do
quote do
use Ecto.Model
end
end
Run Code Online (Sandbox Code Playgroud)
在web.ex以
def model do
quote do
use Ecto.Model
@primary_key {:id, :uuid, []}
@foreign_key_type :uuid
end
end
Run Code Online (Sandbox Code Playgroud)
正如Ecto文档中提到的那样.我也将迁移更改为
create table(:tblname, primary_key: false) do
add :id, :uuid, primary_key: true
[other columns]
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试从自动生成的表单向表中添加一个条目时,我收到一个错误,因为它id是null.如果我手动将id-column 添加到模型中,则会收到列已存在的错误.如果我忽略设置primary_key为false table/2并删除id列,则使用顺序id列生成表.
我是否需要id在变更集中手动设置,或者在设置我的应用程序以使用UUID时出错?提前致谢
在Phoenix框架中处理关联和嵌套表单的方法是什么?如何创建具有嵌套属性的表单?如何在控制器和模型中处理它?
我有2张桌子:
用户:
id
username
password
unique_index username
(the schema has a has_many other)
Run Code Online (Sandbox Code Playgroud)
其他:
id
user_id - references(:users)
foo
index user_id
(the schema has a belongs_to user)
Run Code Online (Sandbox Code Playgroud)
在"其他"的变更集中,我有这个
model
|> cast(params, @req, @opt)
|> foreign_key_constraint(:user_id)
Run Code Online (Sandbox Code Playgroud)
我在这一点上的假设是"其他"ecto模型需要一个"用户"与它相关联才能存在(这就是我想要的)
但我的第二个假设是,如果我删除"用户"记录,那么所有关联的"其他"记录将被删除(通过级联删除)
实际发生的是我在尝试删除"用户"记录时有一个Ecto.ConstraintError(我假设因为有一个与该用户关联的"其他"记录)
那么我将如何以我想要的方式工作呢:
对于引用它的任何项目,基本上是用户级联删除
我有一个Ecto.DateTime来自数据库列的实例,我需要检查这个日期是否超过5分钟.
最好的方法是什么?
为了更清楚,这是我在ruby中所需要的 - >
updated_at < (Time.now - 5.minutes)
Run Code Online (Sandbox Code Playgroud) 无论在iex>或使用mix run -e "My.code"当我运行使用外生混合项目中,外生的调试机制显示像下面一堆sql语句的
16:42:12.870 [debug] SELECT a0.`id` FROM `account` AS a0 WHERE (a0.`account_name` = ?) ["71000000313"] (39.6ms)`
...
Run Code Online (Sandbox Code Playgroud)
当我不再需要调试输出时,如何关闭它,我找不到任何关于如何更改ecto日志级别的东西.
提前致谢.
刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:
这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!
我正在尝试插入发票结构及其关联的发票项目.我可以插入发票数据,并调用匿名函数来验证,转换和插入每个项目.由于insert/2不会产生返回,如果一个项目未通过验证或插入,如何在仍然能够回滚整个事务的同时获取项目的invoice_id?
我把代码放在我自己的回购中,这里是:
def insertassoc(params) do
Repo.transaction(fn ->
i = Invoice.changeset(params["data"], :create)
if i.valid? do
Repo.insert(i)
else
Repo.rollback(i.errors)
end
insert_include = fn k ->
c = InvoiceItem.changeset(k, :create)
if c.valid? do
Repo.insert(c)
else
Repo.rollback(c.errors)
end
end
for include <- params["includes"] do
insert_include.(Map.merge(include, %{"invoice_id" => ????}))
end
end)
end
Run Code Online (Sandbox Code Playgroud)
以下是我在控制器中使用它的方法:
def create(conn, params) do
case InvoiceRepo.insertassoc(params) do
{:ok, x} ->
json conn, Map.merge(params, %{"message" => "OK"})
{:error, x} ->
json conn |> put_status(400), Map.merge(params, %{"message"
=> "Error"})
end
end
Run Code Online (Sandbox Code Playgroud)
有没有很多最新的例子与Ecto,所以抱歉,如果这些是noob问题;-).有人有想法吗?我尝试将发票插入放在私有函数中,并使用case块来确定主事务是否应回滚,但我无法弄清楚如何从中获取发票ID.
在Phoenix中处理多态关联的推荐方法似乎是添加一个包含对其他模式的引用的中间模式:
所以,如果我想用不同种类的动物创建模式,我会这样做:
defmodule Animal do
use Ecto.Model
schema "animals" do
belongs_to(:dog, Dog)
belongs_to(:cat, Cat)
belongs_to(:owner, PetOwner)
end
end
defmodule Dog do
use Ecto.Model
schema "dogs" do
end
end
defmodule Cat do
use Ecto.Model
schema "cats" do
end
end
defmodule PetOwner do
use Ecto.Model
schema "pet_owners" do
has_one(:pet, Animal)
end
end
Run Code Online (Sandbox Code Playgroud)
但我也可以使用PetOwner包含二进制字段和类型的模式:
defmodule Dog do
use Ecto.Model
schema "dogs" do
end
end
defmodule Cat do
use Ecto.Model
schema "cats" do
end
end
defmodule PetOwner do
use …Run Code Online (Sandbox Code Playgroud)