命令
mix phx.gen.html Blog Post posts title body:text
为其他文件生成添加/编辑帖子表单的模板form.html.eex,如下所示:
<%= form_for @changeset, @action, fn f -> %>
<%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below.</p>
</div>
<% end %>
<div class="form-group">
<%= label f, :title, class: "control-label" %>
<%= text_input f, :title, class: "form-control" %>
<%= error_tag f, :title %>
</div>
<div class="form-group">
<%= label f, :body, class: "control-label" %>
<%= textarea f, :body, class: "form-control" %>
<%= error_tag f, :body %>
</div>
<div class="form-group">
<%= submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>
form_for函数获取@action参数,该参数在PostController中不存在,那么它来自哪里?我无法找到。
在我的安装中,我有一个插件MyProject.Locale,它将所有未本地化的请求重定向到本地化的请求,如:
/posts --> /de/posts
我的路由器中有:locale范围
scope "/:locale", MyProject.Web, as: :locale do
pipe_through :browser
get "/", PageController, :index
resources "/posts", PostController
end
默认的@action没有考虑范围的区域设置块,并将POST请求发送到/ posts url,我的MyProject.Locale插件重定向到/ de / posts作为GET request(它使用函数Phoenix.Controller.redirect(to:...))。我希望表单将POST请求发送到本地化路径。 那么,我们可以在一个地方的某个地方覆盖所有资源的@action参数,或者我们必须在渲染函数调用中的每个控制器中提供它吗
render(conn, "new.html", changeset: changeset, action: action)
或唯一的选择是更改所有资源的表单模板?