Elixir / Phoenix通过hidden_​​input传递当前日期

时间:2016-06-22 17:52:08

标签: elixir phoenix-framework elixir-framework

我需要将当前日期传递给HTML中的表单,然后控制器将使用该信息。

<%= form_for @changeset, statistic_path(@conn, :create), fn f -> %>
<%= hidden_input f, :date_from, value: @time_insert.year, class: "form-control" %>
<%= hidden_input f, :date_to, class: "form-control" %>
<%= submit "today", class: "btn btn-primary" %>
<% end %>

这里我有@time_insert,它是:

time = Ecto.DateTime.cast!(:calendar.local_time())
time_insert = Ecto.DateTime.cast!({{time.year, time.month, time.day}, {time.hour, time.min, time.sec, time.usec}})

和表格的控制器:

def create(conn, %{"statistic" => %{"date_from" => %{"day" => day_from, "month" => month_from, "year" => year_from}, "date_to" => %{"day" => day_to, "month" => month_to, "year" => year_to}}}) do

  date_from = Ecto.DateTime.cast!({{year_from, month_from, day_from}, {0, 0, 0, 0}})
  date_to = Ecto.DateTime.cast!({{year_to, month_to, day_to}, {23, 59, 59, 0}})

我正在努力使用语法/方法将当前日期从@time_insert推送到要在控制器中使用的表单中。感谢任何建议。我已经检查了Phoenix.Html.Form,但仍无法使其正常工作:(

PS:我在控制器中制作地图,因为我使用以下变量:date_from,date_to进行进一步查询。

1 个答案:

答案 0 :(得分:0)

正如您在评论中提到的,如果您想在表单中设置“今天”选项,您仍然不必设置日期,尤其是在客户端。

您可以这样做的一种方法是设置一个标志并在控制器中查找它。如果它存在,请按今天的日期过滤搜索。否则,回退到提供的范围或不过滤。

在伪代码中:

def create(conn, %{ "foo_params" => foo_params } do
  case date_range = Map.get(foo_params, "today")
    {:ok, _today} ->
      # filter by today
  _ ->
    # handle other scenarios
  end
end