小编Igo*_*rek的帖子

如何在Phoenix/Elixir中读取配置变量?

我想在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-framework

43
推荐指数
4
解决办法
2万
查看次数

如何在Phoenixframework中使用RethinkDB?

刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:

  1. 连接到RethinkDB;
  2. 启动服务器/管理服务器/连接;
  3. 创建数据库/表;
  4. 执行基本的CRUD操作.

这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!

elixir rethinkdb ecto phoenix-framework

18
推荐指数
1
解决办法
1812
查看次数

Elixir ecto 2创建了many_to_many关联

如何与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)

elixir ecto phoenix-framework

13
推荐指数
1
解决办法
4922
查看次数

如何在凤凰城中将Ecto选择查询转换为结构?

我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.

使用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结构创建一个相应的字段?

elixir ecto phoenix-framework

13
推荐指数
1
解决办法
4453
查看次数

如何向Phoenix项目添加CSS/JS依赖项?

我正在尝试将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. 但是应用程序似乎无法访问它.

我究竟做错了什么.

jquery elixir brunch phoenix-framework

12
推荐指数
3
解决办法
7215
查看次数

Phoenix控制器中的current_user通过Plug传递

将此代码示例作为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)

elixir phoenix-framework

10
推荐指数
1
解决办法
1795
查看次数

Spring Oauth2 - 重新加载校长

我已经使用spring安全模块实现了OAuth2密码授权.我添加了自己的UserDetails实现和UserDetailsS​​ervice(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)加载用户数据?

spring-security spring-oauth2

9
推荐指数
1
解决办法
940
查看次数

在Phoenix Framework中渲染多对多关系JSON

我有下一个型号

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)

elixir ecto phoenix-framework

7
推荐指数
1
解决办法
4022
查看次数

从tsvector中检索词条出现的位置和数量

有没有办法获得有关句子中词汇位置和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.

sql postgresql full-text-search tsvector

6
推荐指数
1
解决办法
641
查看次数

基于Ecto关联查询

在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;

class PostsController < APIController
  def show
    current_user.posts.find(params[:id])
  end
end
Run Code Online (Sandbox Code Playgroud)

使用Ecto表达这一点的最佳方式是什么?

elixir ecto phoenix-framework

6
推荐指数
1
解决办法
1746
查看次数