1
Я пытаюсь отредактировать поле locale_id в таблице «пользователи». Таблица «locales» содержит только идентификатор, код (например, «en» или «ua»), имя и временные метки по умолчанию.Phoenix select form control не имеет эффекта
Вот моя * форма .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
Сообщите нам, что происходит при отправке формы? Вы видите ошибку? Консоль показывает что-нибудь? Можете ли вы опубликовать всю модель пользователя? –
@Gazler Спасибо, он отсутствовал :) Добавил его, и все сработало нормально. –