链接与凤凰

时间:2018-01-15 02:18:28

标签: elixir phoenix-framework

我尝试使用在凤凰城使用link_helpers的链接触发创建操作。但似乎并没有明显的答案,所以这让我觉得这可能是一个不好的做法?

以下是我的尝试:

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

错误:

function StatcastersWeb.PredictionScoreController.index/2 is undefined or private

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

1 个答案:

答案 0 :(得分:3)

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

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

GET  /prediction_scores/ index
POST /prediction_scores/ create

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

  1. 如果您在服务器上执行的操作有效地创建了新资源,那么您希望将其保留为POST创建,因此您必须在{{1}的末尾传递method: :post选项函数调用。

  2. 如果您在服务器上执行的操作只是要呈现某些内容,那么您应该使用link操作或您可以在路由器+控制器中创建的其他创建。