我想在my/config/config.exs文件中设置我的应用程序的标题:
config :my, My.Endpoint,
url: [host: "localhost"],
root: Path.dirname(__DIR__),
secret_key_base: "secret",
title: "My App"
Run Code Online (Sandbox Code Playgroud)
我怎样才能读到title以后在模板中使用它?就像是:
<div>
Title of my app is <%= ??? %>
</div>
Run Code Online (Sandbox Code Playgroud)
我试过conn.title,它说没有这样的钥匙.但是,当我尝试conn.secret_key_base它的时候.为什么?
刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:
这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!
如何与ecto 2建立多对多关系?作为一个示例应用程序,我想创建一个可以在多个类别中的帖子.这些类别已经存在.例如:
[%Category{id: "1", name: "elixir"}, %Category{id: "2", name: "erlang"}]
Run Code Online (Sandbox Code Playgroud)
我正在使用Ecto 2 beta 0.示例项目名为Ecto2.
我定义了两个模型:
defmodule Ecto2.Post do
use Ecto2.Web, :model
use Ecto.Schema
schema "posts" do
field :title, :string
many_to_many :categories, Ecto2.Category, join_through: "posts_categories", on_replace: :delete
timestamps
end
@required_fields ~w(title)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> cast_assoc(:categories) # not suitable?
end
end
defmodule Ecto2.Category do
use Ecto2.Web, :model
schema "categories" do
field :name, :string
timestamps
end
@required_fields ~w(name)
@optional_fields ~w()
def changeset(model, …Run Code Online (Sandbox Code Playgroud) 我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.
使用mix gen任务生成的SongController中的索引操作已修改为:
def index(conn, _params) do
query = from s in Song, select: %{id: s.id, name: s.name, artist: s.artist}
songs = Repo.all(query)
render(conn, "index.html", songs: songs)
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下songs包含列表列表.但是在原始的生成函数中,songs = Repo.all(Song)它是一个Song结构列表.
这意味着模板中的song_path函数会出现以下错误消息: maps cannot be converted to_param. A struct was expected, got: %{artist: "Stephen", id: 3, name: "Crossfire"}
当然,我真正想做的是以某种方式num_votes在select语句中添加一个字段,然后以某种方式为Song结构创建一个相应的字段?
我正在尝试将jquery添加到Phoenix项目中.
当我在头标记的app.html.eex中链接到jquery,如下所示:
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
...有用.
但是,我不想要Web依赖.我想在应用程序中使用jquery.
我已将jquery.min.js复制到web/static/js目录.并在app.html.eex中引用它,如下所示:
<script src="<%= static_path(@conn, "/js/jquery.min.js") %>"></script>
Run Code Online (Sandbox Code Playgroud)
它不起作用.
将jquery.min.js复制到app.js也不起作用.
有趣的是,当我直接在app.html.eex中将脚本标记放在JS之间时,它可以工作.
只有来自云的直接链接和/或将JS放在app.html.eex中的脚本标记之间才能正常工作?
更新:
早午餐正在将JS复制到priv目录中的app.js. 但是应用程序似乎无法访问它.
我究竟做错了什么.
将此代码示例作为Plug来处理身份验证:
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\"}")
|> halt
end
end
end
Run Code Online (Sandbox Code Playgroud)
所以,我通过current_user下游传递变量Plug.Conn.assign/3.在Phoenix控制器中获取此变量的最佳方法是什么?我这样做(下面的代码),但我确信有更好的方法来做到这一点.
def index(conn, _) do
user_id = conn.assigns.current_user.id
end
Run Code Online (Sandbox Code Playgroud) 我已经使用spring安全模块实现了OAuth2密码授权.我添加了自己的UserDetails实现和UserDetailsService(jdbc).我将用户注入我的控制器:
@AuthenticationPrincipal User user
Run Code Online (Sandbox Code Playgroud)
User是UserDetails的实现.现在我想添加更改用户数据的可能性而不刷新令牌.
我尝试用以下内容刷新主体:
User updatedUser = ...
Authentication newAuth = new UsernamePasswordAuthenticationToken(updatedUser, updatedUser.getPassword(), updatedUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(newAuth);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,当我调用另一个控制器方法时,它返回旧的User对象.
有没有办法在没有刷新令牌的情况下更改用户数据?是否有任何解决方案使Spring安全性始终从数据库(而不是从Cache)加载用户数据?
我有下一个型号
defmodule App.User do
use App.Web, :model
alias App.User
schema "users" do
field :name, :string
has_many :roles_users, App.RolesUser
has_many :roles, through: [:roles_users, :role]
timestamps
end
end
defmodule App.Role do
use App.Web, :model
schema "roles" do
has_many :roles_users, App.RolesUser
has_many :users, through: [:roles_users, :user]
field :name, :string
timestamps
end
end
defmodule App.RolesUser do
use App.Web, :model
schema "roles_users" do
belongs_to :role, App.Role
belongs_to :user, App.User
timestamps
end
end
Run Code Online (Sandbox Code Playgroud)
是为了多对多的关系.我要显示的控制器是
def index(conn, _params) do
users = Repo.all(User)
|> Repo.preload(:roles)
render(conn, "index.json", users: …Run Code Online (Sandbox Code Playgroud) 有没有办法获得有关句子中词汇位置和tsvector出现次数的信息?
像这样的东西
SELECT *
FROM get_position(to_tsvector('english', 'The Fat Rats'), to_tsquery('Rats'));
Run Code Online (Sandbox Code Playgroud)
将返回3
和
SELECT *
FROM get_occurrences(to_tsvector('english', 'The Fat Rats'), to_tsquery('Rats'));
Run Code Online (Sandbox Code Playgroud)
将返回1.
在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;
class PostsController < APIController
def show
current_user.posts.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
使用Ecto表达这一点的最佳方式是什么?