小编scr*_*ipt的帖子

获取 github 操作中特定步骤的输出

我有这个运行测试的 GitHub 操作文件,但现在我正在其中集成松弛通知。我想获取该Run tests步骤的输出并将其作为消息发送到 slack 步骤

  - name: Run tests
    run: |
      mix compile --warnings-as-errors
      mix format --check-formatted
      mix ecto.create
      mix ecto.migrate
      mix test
    env:
      MIX_ENV: test
      PGHOST: localhost
      PGUSER: postgres

  - name: Slack Notification
    uses: rtCamp/action-slack-notify@master
    env:
      SLACK_MESSAGE: Run tests output
      SLACK_TITLE: CI Test Suite
      SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
Run Code Online (Sandbox Code Playgroud)

任何帮助都感激不尽。谢谢

github elixir github-actions

22
推荐指数
3
解决办法
2万
查看次数

将Phoenix请求路径与数据库中定义的Route匹配

当我们发送请求时,我们在conn结构中有当前路径信息.让我们说补丁请求.

["v1", "users", "2"] or "v1/users/2"
Run Code Online (Sandbox Code Playgroud)

我正在根据db中的路径信息为用户授权编写插件.在db中,路径存储如下:

"v1/users/:id"
Run Code Online (Sandbox Code Playgroud)

这是我们从跑步中获得的路径mix phx.routes.我有可能得到"v1/users/:id"而不是"v1/users/2"当前的路径吗?所以我可以将它与db中存储的路径相匹配.

有什么工作吗?

elixir phoenix-framework

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

将模块名称转换为String并返回模块

如果我们有这样的模块名称:

 Module.V1.CountryTest
Run Code Online (Sandbox Code Playgroud)

我可以像这样将它转换为String:

   Module.V1.CountryTest |> to_string
Run Code Online (Sandbox Code Playgroud)

现在我有一些有趣的结果 iex

   module = Module.V1.CountryTest |> to_string
         "Elixir.Module.V1.CountryTest"
   iex(2)> replace = Regex.replace(~r/Test/, module, "")
        "Elixir.Module.V1.Country"
   iex(3)> replace |> String.to_atom
         Module.V1.Country
Run Code Online (Sandbox Code Playgroud)

所以,如果我删除Test.并将其转换回atom.它会给我回模块名称.但如果我replaceremove模块名称中的任何其他内容它给我这个输出:

   some = Regex.replace(~r/Country/, replace, "")
     "Elixir.Module.V1."
   iex(5)> some |> String.to_atom
     :"Elixir.Module.V1."
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一下这种行为吗?为什么它不允许任何其他部件更改或更换.这意味着让我回到输出

 Module.V1.Country
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果它可能.

谢谢.

elixir

5
推荐指数
2
解决办法
1391
查看次数

编写查询以获取针对 max 的完整记录

Ecto.Query.Api我们使用inmaxselect获取字段中的最大值,如下所示:

from q in jobs,
select: max(q.cost)
Run Code Online (Sandbox Code Playgroud)

它将返回max该字段中的值。

如果我想返回针对该最大值的完整记录。我必须使用wherenot select

那么我该如何max在哪里使用呢?

所以根据我的理解,我认为我必须fragmentwhere.

那么最好的解决方案是什么?

谢谢

elixir ecto

3
推荐指数
1
解决办法
491
查看次数

优化查询以获得更好的性能

所以我有这个功能.

假设我有数百万的帖子.

我该如何优化此功能?

def fun
  Post.all.each do |post|
    if post.user.present?
       post.active = true
    else
       post.active = false
    end
    post.save
  end
end
Run Code Online (Sandbox Code Playgroud)

就像这样做更少,具有更好的性能,因为这不是一个非常好的方法.

ruby performance ruby-on-rails query-performance ruby-on-rails-4

2
推荐指数
1
解决办法
71
查看次数

ecto 中的复合主键

在迁移中,我们可以添加多个主键,它们都充当复合主键。我的表中有四个字段,其中三个是主键并且工作正常。当我尝试添加新的迁移并将第四列设为主键时。Postgres 给了我这个错误。

\n\n
   (Postgrex.Error) ERROR 42P16 (invalid_table_definition) multiple primary keys for table "rooms_units" are not allowed\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的新迁移:

\n\n
alter table(:rooms_units) do\n  modify(:date_to, :utc_datetime, primary_key: true)  \nend \n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我将其添加到原始迁移中,则效果很好。

\n\n

这是我原来的迁移:

\n\n
  create table(:rooms_units, primary_key: false) do\n   add(:room_id, references(:rooms), null: false, primary_key: true)\n   add(:unit_id, references(:units), null: false, primary_key: true)\n   add(:date_from, :utc_datetime, null: false, primary_key: true)\n   add(:date_to, :utc_datetime, null: false, default: fragment("\'infinity\'::timestamp"))\n  end\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我在 date_to 列中添加 Primary_key: true ,则效果很好。迁移成功运行。

\n\n

所以我想语法是正确的。但它不会在新的迁移中\xe2\x80\x99 工作。

\n\n

有什么建议或解决方法吗?\n谢谢。

\n

elixir ecto

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

从表中获取外键的惯用法

让我们假设我有一张桌子"customers".我想获得该表的外键.

我们可以使用model.__ struct .__ meta` 从模型中获取表名

我们还可以通过加载所有模块从表中获取模型名称,并使模型模式与表名匹配

这可能是我们从表中获取外键吗?

这样做的最佳方法是什么?

如果它可能在ecto?

谢谢.

elixir ecto

0
推荐指数
1
解决办法
103
查看次数