【问题标题】:Phoenix select form control has no effect凤凰选择表单控件没有效果
【发布时间】:2016-05-22 19:56:46
【问题描述】:

我正在尝试编辑表“用户”中的 locale_id 字段。 表“locales”仅包含 id、代码(如“en”或“ua”)、名称和默认时间戳。

这是我的 *.eex 表单代码:

<%= form_for @changeset, user_path(@conn, :update, @current_user), [multipart: true], fn f -> %>
...
<div class="form-group">
    <label>Language</label>
    <%= select f, :locale_id, @locales, class: "form-control" %>
</div>
...
<% end %>

控制器代码:

plug :load_locales when action in [:new, :create, :edit, :update]

...

def edit(conn, %{"id" => id}) do
  user = Repo.get!(Rumbl.User, id)
  changeset = Rumbl.User.changeset(user)
  render(conn, "edit.html", user: user, changeset: changeset)
end

def update(conn, %{"id" => id, "user" => user_params}) do
  user = Repo.get!(Rumbl.User, id)
  changeset = Rumbl.User.changeset(user, user_params)

  case Repo.update(changeset) do
    {:ok, user} ->
      conn
      |> redirect(to: user_path(conn, :show, user))
    {:error, changeset} ->
      render(conn, "edit.html", user: user, changeset: changeset)
  end
end

defp load_locales(conn, _) do
  locales = Repo.all from(c in Rumbl.Locale,
                          order_by: c.id,
                          select: {c.name, c.id})
  assign(conn, :locales, locales)
end

来自模型“用户”的架构:

  schema "users" do
    field :name, :string
    field :username, :string
    field :password, :string, virtual: true
    field :password_hash, :string
    belongs_to :locale, Rumbl.Locale
    has_many :friends, Rumbl.Friend
    has_many :devices, Rumbl.Device
    timestamps
  end

来自模型“语言环境”:

  schema "locales" do
    field :name, :string
    field :code, :string
        has_many :users, Rumbl.User
    timestamps
  end

【问题讨论】:

  • 您是否在变更集函数中指定了该字段?
  • 在您提交表单时告诉我们发生了什么?你看到错误了吗?控制台是否显示任何内容?你能发布整个用户模型吗?
  • @Gazler 谢谢,它不见了 :) 添加它,一切正常。
  • @ScottS。我将 locale_id 添加到 def changeset(model, params \\ :empty) do model |> cast(params, ~w(name username locale_id), []) |> unique_constraint(:username) |> validate_length(:username, min: 1,最大:20)结束,一切都跑了。谢谢你:)

标签: elixir phoenix-framework changeset


【解决方案1】:

我添加了locale_id

def changeset(model, params \\ :empty) do
  model
  |> cast(params, ~w(name username locale_id), [])
  |> unique_constraint(:username)
  |> validate_length(:username, min: 1, max: 20)
end

一切都运行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2018-07-02
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多