凤凰框架:资源的默认形式@action属性来自哪里?

时间:2017-06-18 07:54:43

标签: forms phoenix-framework

命令

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)

或唯一的选择是更改所有资源的表单模板?

0 个答案:

没有答案