什么是查看数据库中条目数的最快方法?我想查看帖子/索引视图中的帖子数量.
假设我有一个Post模型和一堆保存在我的数据库中的帖子.在Rails中,我可以在视图文件中执行以下操作:
<h1><%= @posts.length %> Posts</h1>
Run Code Online (Sandbox Code Playgroud)
要么
<h1><%= @posts.size %> Posts</h1>
Run Code Online (Sandbox Code Playgroud)
要么
<h1><%= @posts.count %> Posts</h1>
Run Code Online (Sandbox Code Playgroud)
什么是凤凰城框架/ Elixir等同物?
在Rails中,如果我有以下设置:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
def self.approved
where(approved: true)
end
end
Run Code Online (Sandbox Code Playgroud)
然后我可以做这样的事情:
post = Post.find(100)
comments = post.comments.approved
Run Code Online (Sandbox Code Playgroud)
快速获得给定的所有批准的评论Post.
我怎样才能在Ecto中做类似的事情?
defmodule MyApp.Post do
use Ecto.Model
schema "posts" do
#columns omitted
has_many :comments, MyApp.Comment
end
end
defmodule MyApp.Comment do
use Ecto.Model
schema "comments" do
#columns omitted
belongs_to :post, MyApp.Post
end
end
Run Code Online (Sandbox Code Playgroud)
我post有comments预装的:
post = MyApp.Post
|> MyApp.Repo.get(100)
|> MyApp.Repo.preload(:comments)
Run Code Online (Sandbox Code Playgroud)
我甚至不确定从哪个approved范围开始MyApp.Comment.
有没有办法从该频道外部向频道广播消息?
也许是这样的Channel.broadcast topic, event, data?
我在这里看到了类似的东西但是Phoenix.Channel.broadcast/3(截至今天)的最终版本采用了一个隐含通道和主题的套接字.
我试图让多个选择与phoenix_html表单助手一起工作
<%= select f, :challenge_ids, ["foo": "1","bar": "2","baz": "3"], class: "form-control", multiple: "" %>
Run Code Online (Sandbox Code Playgroud)
但只有最后一个选定项目的id才会被发送到params中的服务器
%{"challenge_ids" => "3", "content" => "", "name" => ""}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:challeng_ids改为:"challenge_ids[]"试图获得类似于多选标记的rails输出的东西,但这没有任何区别
Phoenix scrub_params方法的文档对我来说有点不清楚.看起来这个功能类似于Rails强参数功能.但是,当你在像这样的控制器中使用它时,
plug :scrub_params, "user" when action in [:create]
Run Code Online (Sandbox Code Playgroud)
...您没有明确说明要将哪些参数列入白名单.我已经查看了代码scrub_params,但是我对Elixir的说法非常苛刻,我不太确定发生了什么.
此方法只是查看模型并使用必需和可选的字段模块属性来列入白名单参数吗?
此外,scrub_params文档说"检查required_key是否存在".什么是"必需的钥匙"?这只是模型中的必填字段吗?
我的意思是如果字符串为空或仅包含空格,则该字符串为空.例如""," "并且"\n"都是空白.
在Rails中,我们有.blank?方法.
Elixir(或凤凰框架)中有类似的东西吗?
我有一些Javascript,我只想包含在我的Phoenix应用程序的某些页面上.
现在我已经在脚本标签中加入了Javascript myapp/web/templates/post/form.html.eex.
我知道我可以将JavaScript移动到web/static/js/app.js...但我不想在每个页面上包含Javascript(仅在2个特定页面上需要).
在我的应用程序中的某些页面上加载此部分Javascript而不重复代码并违反DRY原则的最佳方法是什么?
这个功能:
defp entries(query, page_number, page_size) do
offset = page_size * (page_number - 1)
query
|> limit([_], ^page_size) # error
|> offset([_], ^offset)
|> Repo.all
end
Run Code Online (Sandbox Code Playgroud)
给出了一个例外:
cannot use ^pg_size outside of match clauses
Run Code Online (Sandbox Code Playgroud)
为什么这样以及如何解决?
我正在尝试测试希望使用phoenix框架上传文件的控制器.我按照凤凰指南(http://www.phoenixframework.org/docs/file-uploads)上的指南进行操作,它在浏览器中工作,但我在编写测试时遇到了麻烦.这是我做的:
test "POST photo" do
{ :ok, raw_file } = File.read "1528_27.jpg"
conn() |> post("/api/v1/originals", %{ :image => raw_file })
# do some assertions
end
Run Code Online (Sandbox Code Playgroud)
问题是,在控制器中,我的文件永远不会以%Plug.Upload结构形式结束,而是以二进制形式结束.所以在测试时,我在控制器中的参数看起来像:
params: %{"image" => <<255, 216, 255, 225, 18, 180, 69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 10, 0, 15, 1, 2, 0, 26, 0, 0, 0, 134, 0, 0, 0, 16, 1, 2, 0, 10, 0, ...>>},
Run Code Online (Sandbox Code Playgroud)
当我试图访问时,我的控制器会爆炸params["image"].path.这在从浏览器上传时起作用,因为那时,我在我的参数中有预期的上传结构:
params: %{
"image" …Run Code Online (Sandbox Code Playgroud) 我使用数字海洋从你好的例子中创建了一个凤凰项目.我输入了etc/motd.tail文件中的用户名和密码.我一直收到以下错误消息.我是初学者,由于某种原因,我无法正确安装ecto.
**(混合)无法创建Hello.Repo的数据库,原因如下:psql:FATAL:用户"elixir"的密码验证失败致命:用户"elixir"的密码验证失败
您可以使用以下Postgress数据库凭据:*用户:elixir*通行证:***
安装.任何帮助,将不胜感激.