我有一个小的Phoenix应用程序,允许用户登录并查阅他们的个人资料。我使用了以下简单的路线:
resources "/users", MyApp.UserController
但这允许每个用户通过:index操作查看用户列表,以及删除或更新任何用户
限制管理员访问权限的最简单方法是什么?我应该在每个动作前加一张支票吗?或者我应该创建一个“/admin”资源来处理这些操作吗?推荐的方法是什么?您可以使用用户控制器中的插头0.4.x无法有条件地插入s,但您可以通过以下方式实现所需:
defmod
我的标题不是很好,因为我发现很难在一个小片段中解释我想要什么…所以我会深入尝试
我正在使用Phoenix web框架编写一个长生不老药应用程序
我想做的是:
调用一个web路由,phoenix处理该路由并将其传递给控制器
控制器,用于启动要移交给消息队列的进程
当资源可用时,队列中要处理的最新项目(即CPU/内存/etc)
流程不需要返回web路由(即其异步)
我知道如何在其他语言中通过使用消息队列(Beanstalk、RabbitMQ、sidekiq)来处理这一问题,并拥有将“作业”交给工
我似乎无法连接macbook pro上的两个节点。我正在使用
iex-sname foo和iex-sname bar在两个单独的终端会话中,它们彼此看不见。我试过设置防火墙并完全关闭它,但运气不好
在foo中,我使用Node.self查看全名是:“foo@ewHBook-Pro“然后在工具栏中,我尝试了Node.connect:foo@ewHBook-Pro“和Node.ping:”foo@ewHBook-Pro“这可能是主机文件中的一个问题。请查看pma在上的评论
这个问题的解决方案是使用ie
我正在努力使我的应用程序干燥和模块化。但是,当我试图将一个组件(小模板)放入另一个模板(较大的模块)中,该组件接收调用/“实例化”时传递的动态值时,我遇到了以下错误:
assign @conn not available in eex template. Available assigns: []
我在模块(大模板)中插入的组件(小模板)如下:
菜单
我使用以下方法将其插入我的模块:
<%= render myapp.ComponentView, "menuButton.html",
假设我有这样一个疑问:
User
|> where([u], u.name == "John" or u.age == 24)
我想将其转换为一个函数,它可以获取字段名和字段值的关键字列表,并动态生成相同的查询。函数定义如下所示:
def where_any(query, field_names_to_values) do
...
end
User
|> where([u], any_expr(u, [name: "John", age: 24]))
这在Elixir和Ec
标签: Elixir
phoenix-frameworkcowboy
我目前正在开发一个网站与凤凰城,并有一个视频部分,应该在后台播放
虽然它在Chrome和Firefox上运行良好,但在Safari上不起作用
我怀疑这是因为cowboy没有正确地服务HTTP范围请求
是否有方法启用(如果默认禁用)
当它应该是如nginx服务器所示的206时:
$ curl -H Range:bytes=16- -I http://localhost/videos/vid_home_1.mp4
HTTP/1.1 206 Partial Content
Server: nginx/
使用Map.merge我有:
Map.merge(%{ a: %{ b: 1 }}, %{ a: %{ c: 3 }}) # => %{ a: %{ c: 3 }}
但实际上我想:
Map.merge(%{ a: %{ b: 1 }}, %{ a: %{ c: 3 }}) # => %{ a: %{ b: 1, c: 3 }}
对于这种情况,有没有不编写递归样板函数的本机方法?如果在映射中只有一级映射嵌套,并且顶级映射的所有值都是映射,则可以使用map.merge/3:
iex(
标签: Elixir
phoenix-frameworkecto
我正在开发一个多用户、多聊天室的聊天应用程序,我的模型如下(为了简单起见,省略了应用程序模型):
及
接下来,我从iex创建了一些房间和用户(每个三个)。现在我想知道:假设我希望user1属于room1和room2,user2属于room2和room3。。。怎么做
在我看来,虽然定义模式很好,但必须有一个中间步骤来执行类似于user1.rooms=[room1,room2]的操作。最后我看到了一个build\u assoc的示例:
Ecto.build_assoc(current_user, :
我有一个生成进程的函数,它执行如下查询:
def trigger_schedule(u = %User{}) do
spawn(fn ->
(Repo.preload(p, :tasks)).tasks
|> Enum.map(fn ts -> trigger_schedule(ts) end)
end)
u
end
这段代码是由某些操作触发的,只是为了在后台运行。但是,当我运行测试时,我开始看到:
00:37:33.3
在尝试将参数添加到view render/2方法时,为什么会出现此错误
def render("show.json", %{post: post}), do: render("show.json", %{post: post}, [user: true, room: true])
def render("show.json", %{post: post}, opts) do
%{
# stuff
user: if(Keyword.fetch!(opts, :user), do
我正在为
其中,要选择的主题是:
def subjects_to_select(subjects) do
subjects
|> Enum.map(&{&1.title, &1.id})
|> List.flatten
end
但是,是否不仅可以显示标题(在选择器中),还可以显示其他变量?从db中,我返回选择:%{title:p.title,teacher:u.names,lvl:p.lvl,id:p.id},我需要提供类似lvl,titl
我正在会话中存储一些元数据,以便根据字符串访问不同的模块
有没有办法做到这一点
String.to_module("MyApp.Vendor") #=> MyApp.Vendor
String.to_module("MyApp.Customer") #=> MyApp.Customer
然后,最终目标是使用account\u type按id查找结构,以执行特定于该类型的操作
account = Repo.get(String.to_module(account_type), a
我正在使用长生不老药,并听从医生的建议
博客文章
我遇到了跟踪哪个模拟函数对应的问题
哪个测试。我为api包装器的测试环境添加了一个模拟模块。当我将模拟函数添加到模拟api模块时,我发现我不记得编写了哪些函数来返回哪些测试的结果
我一直在试图找到一种在测试附近使用宏来定义模拟方法的方法。作为一项学习练习,我对这个问题也很感兴趣
以下是我对其工作的设想:
defmodule SomeMockModule do
end
defmodule MockUtil do
defmacro add_mo
我正在编写一个模块a,它定义了宏,这些宏被另一个模块B
defmodule A do
defmacro __using__(_) do
quote do
import A, only: [macross: 1]
def call
IO.inspect @macross_value
end
end
end
defmacro macross(value)
quote do
@macross_val
标签: Elixir
phoenix-frameworkectootpdecoupling
在看了演讲之后,我明白了如何将web界面和OTP应用程序分开,然而,如果OTP应用程序和Ecto代码有区别的话,应该如何分开呢
目前,我正在编写一个OTP应用程序,在handle\u call/3回调中调用EXTO函数或EXTO函数的包装函数:
@doc”“”
生成一个训练。
iex>Pullapi.Database.delete_workouts()
iex>Pullapi.Database.delete_set()
iex>result=Pullapi.GenServerWorker.han
我有一张空名单
val = []
当运行下面的代码时
Enum.each [1, 2, 3], fn x ->
IO.puts x
end
我们得到以下输出
1
2
3
:ok
这意味着,可以在每个块中访问元素
现在,当我运行以下代码时:
Enum.each [1, 2, 3], fn x ->
IO.puts x
val = val ++ [x]
end
这将得到以下结果
1
2
3
:ok
但是val的值没有改变,它仍然是[]
如果我单独在iex上运行
va
我想在一本书中建立一个描述。
我有两个兄弟应用程序压缩器和打印机
压缩器取决于是围绕谷歌snappy压缩算法的nif包装器
# apps/compressor/mix.exs
defmodule Compressor.MixProject do
# ..
defp deps do
[
{:snappyer, "~> 1.2.4"},
]
end
end
# apps/compressor/lib/compressor.ex
defmodule
我尝试运行fin函数,但由于某些原因,我得到了nil。
我搜索的项目必须在那里,我怎样才能让html看到哪里出了问题?我不知道这是否是您的问题,但当我尝试wallaby使用此html时:
<p class="results"><div class="green">That's all folks!</div></p>
我得到了一个错误:
**(Wallaby.QueryError)应找到1个与css“.results”匹配的可见元素,但找到0个可
在我的Mix应用程序中,有一组特定的情况似乎导致运行测试套件的进程挂起。下面是一个场景-
在test/test\u helper.exs中,在调用ExUnit.start()之前,我调用了Mix.Shell.IO.yes?,其中用户确认测试行为的某些方面
if Mix.Shell.IO.yes?("Set up additional test assets?") do
Mix.Task.run "run", ["test/support/fetch_and_start.exs"]
end
刚刚开始我的长生不老药之旅。在书中阅读:
“运算符将后面的表达式转换为函数。”
好的,我想我明白了
iex(70)> f = &(&1 * &2)
#Function<12.80484245 in :erl_eval.expr/5>
iex(72)> f.(2,3)
6
iex(70)>f=&1*&2
#作用
iex(72)>f.(2,3)
6.
好的,符号是匿名函数及其参数的缩写。但是,为什么下一个电话不起作用
iex(73)> &am
是否可以为模块指定编译优先级?假设我有两个文件a.ex和b.ex,我想在使用混合编译时首先编译b.ex。可能吗 您可能需要特殊的表单。因此,如果我确实需要a.ex中的b.ex,它是否能保证b.ex首先得到编译?它在模块级而不是文件级工作。在模块栏中,您可以要求使用Foo,这将保证首先编译Foo。如果您将这些模块放在单独的文件中,它仍然可以工作。
当我这样做时:
IO.inspect [:right, :top, :left, ...very_long_list]
我只得到第一个项目(这是一个解决15个难题的移动列表),如下所示:
[:right, :top, :left, :bot, :bot, :left, :top, :top, :right, :right, :bot,
:left, :bot, :left, :top, :right, :bot, :right, :top, :top, :left, :bot,
:le
我知道可以将一个列表传递给一个函数,然后对其进行迭代。但是,我更喜欢具有更明确签名的函数。所以我真正想知道的是Elixir是否有任何东西与Javascript中的参数对象等价
据我所知,答案是否定的。我所见过的关于这个话题的最接近的讨论是对的答案
我之所以寻找这个特性,是因为我有好几次发现自己将相同的转换应用于多个参数,这有点乏味。这可能是通过宏实现的吗?这是可能的,但我很少使用它:
在函数顶部调用binding()将为您提供范围内绑定及其值的关键字列表,如果您将其作为函数的第一行调用,则这些关
在Elixir IRC中,josevalim,通过定义然后使用布局辅助对象,例如:
<%= with_layout Layout, "app..." do %>hello<% end %>
你好
我对Phoenix非常陌生,但是我假设在与上面的模板对应的视图中定义了with_layout辅助对象,但是我不知道在哪里/如何定义和/或访问此布局。我现在熟悉“模板”和“视图”,但找不到有关Phoenix布局或布局助手的更多信息
所以我的问题是,Layout在这里到底指的是什
我想使用is_range()guard。例如:
def foo(bar) when is_range(bar) do
# stuff
end
但是范围是否不存在?我在用长生不老药1.0.5
我试过了
def foo(bar) when Range.range?(bar) do
# stuff
end
但这也不起作用
我该怎么办?您可以在guards中使用的函数类型非常有限
范围是一个结构,它是映射,因此您可以使用is\u映射
功能
iex(1)> foo = 1..
将此代码示例作为处理身份验证的插件:
defmodule Financeweb.APIAuth do
...
def call(conn, _opts) do
...
if authenticated_user do
conn
|> assign(:current_user, user)
else
conn
|> send_resp(401, "{\"error\":\"unauthorized\"}")
是否可以更新elixir中的嵌套关键字列表?
例如,我正在努力使以下工作
Keyword.put(conn.private.phoenix_endpoint.config(:url), :host, conn.host)
但是无论如何,更新的主机不会反映在conn变量中。您可以使用该变量,它将与映射和关键字列表组合使用
put_in(conn, [:private, :phoenix_endpoint, :config, :url, :host], conn.host)
Edit正如@ma
我写了一个程序用Elixir打印两个数字的和。我将文件保存为solution.ex,当我使用elixirc as elixirc solution.ex编译它时,它会编译并执行代码。我认为elixirc只会编译代码并生成一个二进制文件,使用elixir运行二进制文件将执行它。任何帮助都将不胜感激
defmodule Solution do
defp sum(a, b), do: a + b
def main() do
a = IO.gets("") |> String.s
我有一个主管,我想知道在任何给定时间在该主管下运行的所有流程。似乎应该有一种简单的方法来获取主管下或节点中所有进程的所有PID、名称等,但我找不到任何东西
有什么建议吗?您可以使用:
iex>Supervisor.who_儿童(MyApp.Supervisor)
[{MyApp.SubSupervisor,#PID,:supervisor,[MyApp.SubSupervisor]},
{MyApp.Endpoint,#PID,:supervisor[MyApp.Endpoint]}]
返回一
我有一个具有以下模式的用户配置文件模型:
schema "user_profiles" do
field :birthday, Ecto.Date
field :gender, :string
field :first_name, :string
field :last_name, :string
field :description, :string
field :username, :string
# Associations
标签: Elixir
phoenix-frameworkecto
克隆体外模型/记录的最简单方法是什么?我有一个包含许多成分和嵌入标签的样本配方模型
模型
克隆配方记录
如何克隆配方记录并创建用于插入新配方记录的变更集
recipe = Repo.get(App.Recipe, 1)
recipe_changeset = Ecto.Changeset.change(recipe)
# ... Steps for cloning record with embeds?
new_recipe = Repo.insert(recipe_changeset)
我有一个模型和变更集方法。我希望有一个可选字段,如果它没有传递到chargeset,我希望设置一个默认值。我如何才能做到这一点?当您创建模式时,您可以通过将:default原子传递给它一个默认值
schema "foo" do
field :name, :string, default: "bar"
end
如果你的需求很简单,贾斯汀的回答肯定是最优雅的,但在我的情况下,我需要多一点灵活性。我需要能够生成一个唯一的、加密安全的值
我是在我的变更集管道中完成的:
def changeset(
标签: Elixir
phoenix-frameworkecto
我有表格,类别和子类别
类别有许多子类别,子类别属于类别
在中的我的频道handle_中,有一个插入子类别的函数,如下所示
def handle_in("create:subcategory", %{"name" => name, "category_id" => category_id}, socket) do
changeset = Subcategory.changeset(%Subcategory{name: name, category_id: category_id})
我有一个雨伞应用程序。我看到了透析器的价值,我正试着开始使用它。我已经走了相当远,但我有一个关于外太空的问题,我无法解决
这是一个用于处理身份验证的小型应用程序。我可以用最简单的例子把它全部删减
使用Elixir 1.4.2和Dialyxir 0.4.0
有问题的代码
defmodule Auth.Account do
use Ecto.Schema
import Ecto.Changeset
schema "auth_accounts" do
field :email,
我将我的代码库从Livestory重命名为Citybuilder。我对文件中的文本使用查找和替换,然后使用mv重命名目录。Livestory的代码基搜索返回零结果
当我运行mix phx.server时,我得到:
variable "citybuilder" does not exist and is being expanded to "citybuilder()", please use parentheses to remove the ambiguity or change the va
我的应用程序插入数百万条记录。数据表每秒钟的大小ets都会增加几mb
在deps/exto/lib/exto/query/planner.ex中,我找到了将数据插入ets的cache\u insert函数。如何禁用此行为
我的插入功能:
defp to_cache(links) do
recs =
Enum.uniq(links)
|> Enum.filter(fn (link) -> (link != nil and link != "") end)
我需要转换这个字符串
"/{foo}/{bar}.{format}"
在
因为我有一个包含这些属性的列表。
比如说
a["foo"] = "home"
a["bar"] = "picture"
a["format"] = "jpg"
我试着做这样的事情
String.replace(a,"{",~s(#{))
但我犯了这个错误(
SyntaxError)iex:8:意外标记:)
我甚至尝试用一个regexp创建一个列表来获得结果,但我不明白如何应用这个regexp([^{]*?)\w(?=
我正在查看HTTP客户端包的源代码,并试图找到Tesla.get/2函数的源代码,但在这里找不到它,就像其他HTTP方法的函数一样。顺便说一句,在线文档中的“查看来源”链接也无法打开。我很困惑,有人能解释一下吗 该包使用元编程为每个HTTP谓词生成函数。动词的名称已定义
此列表被迭代,并为每个列表动态生成函数。每个函数的实际主体在generate\u api函数中定义。因此,Tesla.get/2的实际来源是:
如果将方法替换为:get,则可以得到Tesla.get/2的有效定义:
def ge
标签: Elixir
phoenix-frameworkwallaby
我正在努力做一个新的凤凰城项目。我已经按照自述文件中的安装说明进行了操作,但是当我尝试运行基本测试时,我遇到了一个EXTO注册表错误:
1) test home page has welcome message (WallabyTestWeb.HomePageTest)
test/wallaby_test_web/features/home_page_test.exs:6
** (ArgumentError) argument error
stacktrace:
我试图创建一个联接表,但在构建结构时遇到了这个错误
错误
未为%Statcasters实现协议可枚举。UsersLegues{meta:#exto.Schema.Metadata,专员:nil,id:nil,插入地址:nil,联盟:#exto.Association.NotLoaded,联盟id:nil,更新地址:nil,用户:#exto.Association.NotLoaded,用户id:nil}。此协议的实现对象为:DBConnection.PrepareStream、DBConnecti
在阅读exto.schema.metadata时,我发现我们可以使用模型名来获取该模型的表,如下所示:
[
Ecto.Schema.Metadata,
nil,
{nil, table_name},
:built
] = Map.values(model_name.__struct__.__meta__)
我的问题是,我们可以使用表名来获取该表的模型吗?AFAIK,没有明确的方法来实现这一点,但由于我们使用的是Elixir,一切都是可能的:
与{:ok,mods}Enum.fi
像some_-maps=[%{“test”=>[1]}、%{“test2”=>[2]}、%{“test”=>[3]}]这样的映射列表如何转换为一个巨大的单一映射,并合并其值
single_map = %{"test" => [1, 3], "test2" => [2]}
因为我不能在像for这样的迭代中修改映射,所以我不知道如何构建这个映射
在另一种语言中,我会定义一个空映射并遍历列表并填充映射,但从功能上看,我不知道如何才能做到这一点。这里有一种方法:
Enum.reduce(s
标签: Elixir
phoenix-frameworkhmacplug
我正在努力解决一个问题,即在Plug.Parsers.JSON进入管道之前,有东西正在读取http请求的主体。因此,在插件中读取json的主体超时——您不能读取主体两次
我们在管道中的早期插件中有一个HMAC实现,它在某些情况下读取主体。在插头中,身体的使用有什么模式吗?我的意思是,如果我们只能读一次,并且必须在Plug.Parsers.JSON中进行解码,那么……它就不起作用了
接下去的问题。生成HMAC散列时是否需要包含请求主体?我的意思是,我觉得我们必须这样做,但我认为我自己在这一点上是一
根据我在C的经验
你真的应该回来吗
"Hello Wol!"
这意味着\b实际上将其前面的字符退格。
所以我试着用长生不老药做同样的事情,用同样的方法得到了不同的结果。
结果如下
“你好,世界!”
换新行时也会发生同样的情况\n
请帮忙。。试图解决一个问题。
转义的其他字符如下
\a BEL (0x07)
\b BS (0x08)
\d DEL (0x7f)
\e ESC (0x1b)
\f FF (0x0c)
\n NL (0x0a)
\r CR (0x0d)
\s SP (0x20
我正在使用Elixir…我发现,在定义以下没有宏的代码时,我必须将inspect\uuuu ENV\uuuu放入,然后从打印的行号中减去2,以获得运行打印块的行号
h1 do
h2 do
print_block "prints message" do
IO.puts "hello world!"
IO.inspect(__ENV__)
end
end
end
打印块的函数定义如下所示:
def print_block(_msg, do: code
现在我正在使用DateTime.utc\u,它返回以下内容:
~U[2019-07-27 19:44:24.834413Z]
这很好,但我想要一个函数,它将返回:
~U[2019-07-27 19:44:24]
就我的一生而言,我似乎找不到我想要的东西。有人能帮我吗?你可以使用这个功能
iex(1)> dt = DateTime.utc_now()
~U[2019-07-28 01:56:57.902304Z]
iex(2)> DateTime.truncate(dt, :secon
我试图用Enum.map函数迭代一个字符列表,但它的行为与我期望的不一样
第一行没有将charlist视为char列表,第二行我不理解为什么修改匿名函数会这样做
iex(32)> Enum.map('ABCD',fn(char)->char end)
'ABCD'
iex(33)> Enum.map('ABCD',fn(char)->[char] end)
['A', 'B', 'C', 'D']
我希望第一行返回['A','B','C','D'],第二行返回['A
最近开始使用exercism学习长生不老药,我在使用mix时遇到了一些问题。我对使用这个工具是完全陌生的,所以我可能错过了一些基本的东西
当我在带有tests子目录的目录中运行mix test时,我得到一个错误
**(混合)找不到任务“compile.all”
当我运行mix deps.get或mix deps.compile时,我得到另一个错误
**(混合)找不到任务“archive.check”
我做错了什么?我想我需要安装一些任务吗
我希望在通过/失败的条件下运行一些单元测试,但是我在上面
标签: Elixir
phoenix-frameworkecto
我有下面的DB表关系
州1-1Member1-NMemberAction
如果是SQL,我想获取数据
SELECT A.action, M.member_name,
FROM MemberAction A
JOIN Member M
ON M.id = A.member_id
JOIN Prefecture P
ON M.prefecture_id = P.id
然而,我不知道如何用EXTO编写代码。
以下代码不起
标签: Elixir
phoenix-frameworkecto
我一直在RubyonRails世界中学习长生不老药
我有下表:
release_track_id | release_id | track_id | release_side_id | track_number
------------------+------------+----------+-----------------+--------------
347 | 70 | 211 | 3 |
上一页 1 2 ...
29 30 31 32 33 34 35 ...
下一页 最后一页 共 125 页