我尝试使用在凤凰城使用link_helpers的链接触发创建操作。但似乎并没有明显的答案,所以这让我觉得这可能是一个不好的做法?
以下是我的尝试:
<%= link "Create Prediction Points", to: prediction_score_path(@conn, :create) %>
错误:
function StatcastersWeb.PredictionScoreController.index/2 is undefined or private
有办法做到这一点吗?如果是的话,我应该吗?
答案 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
。您可以通过两种方式修复它:
如果您在服务器上执行的操作有效地创建了新资源,那么您希望将其保留为POST创建,因此您必须在{{1}的末尾传递method: :post
选项函数调用。
如果您在服务器上执行的操作只是要呈现某些内容,那么您应该使用link
操作或您可以在路由器+控制器中创建的其他创建。