Elixir 链接创建与凤凰城的行动

Elixir 链接创建与凤凰城的行动,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在尝试启动一个创建操作,其中包含一个链接,指向Phoenix中的link_helpers。但似乎没有一个明显的答案,所以我认为这可能是一个不好的做法 以下是我正在尝试的: <%= link "Create Prediction Points", to: prediction_score_path(@conn, :create) %> 有办法做到这一点吗?如果是这样,我应该吗?任何可能改变服务器上某些内容的操作都应该在HTTP POST后面,而不是HTTP GET后面。因此,即使

我正在尝试启动一个创建操作,其中包含一个链接,指向Phoenix中的link_helpers。但似乎没有一个明显的答案,所以我认为这可能是一个不好的做法

以下是我正在尝试的:

<%= link "Create Prediction Points", to: prediction_score_path(@conn, :create) %>

有办法做到这一点吗?如果是这样,我应该吗?

任何可能改变服务器上某些内容的操作都应该在HTTP POST后面,而不是HTTP GET后面。因此,即使您可以在控制器中设置一个指向
create
操作的链接,我们肯定可以,而且我们会在一秒钟内完成,也不建议这样做,因为
create
操作通常会在服务器中创建一些内容,如果您将这些内容放在链接后面,浏览器插件可能会意外访问这些内容,爬虫之类的东西

也就是说,如果在应用程序中运行
mix phx.routes
,您将看到以下路由:

GET  /prediction_scores/ index
POST /prediction_scores/ create
i、 URL是相同的,但请求之间的变化是HTTP动词(GET vs POST)。这就是为什么它试图调用
index/2
,而不是
create/2
。您可以通过两种方式修复它:

  • 如果您在服务器上执行的操作有效地创建了新资源,那么您不希望将其保留为POST create,因此您必须在
    链接
    函数调用的末尾传递
    方法::POST
    选项

  • 如果您在服务器上执行的操作只是要渲染某些内容,那么您应该使用
    索引
    操作或可以在路由器+控制器中创建的其他创建


  • 你能发布完整的错误信息吗?控制器中的函数名似乎有误或不带2个参数。另外,路由定义是什么样子的?谢谢您提供详细的答案。非常有用
    GET  /prediction_scores/ index
    POST /prediction_scores/ create