2016-05-22 4 views
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 
+1

Вы указали это поле в своей функции набора параметров? – Gazler

+0

Сообщите нам, что происходит при отправке формы? Вы видите ошибку? Консоль показывает что-нибудь? Можете ли вы опубликовать всю модель пользователя? –

+0

@Gazler Спасибо, он отсутствовал :) Добавил его, и все сработало нормально. –

ответ

0

Я добавил 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 

и все побежали.