2016-05-22 11 views
1

Ich versuche, das Locale_id-Feld in der Tabelle "Benutzer" zu bearbeiten. Die Tabelle "locales" enthält nur ID, Code (wie "en" oder "ua"), Name und Standardzeitstempel.Phoenix Select Formular Steuerelement hat keine Wirkung

Hier ist meine * .eex Form Code:

<%= 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 %> 

Controller-Code:

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 

Das Schema von Modell "user":

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 

Von Modell "locale" :

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

Haben Sie das Feld in Ihrer Changeset-Funktion angegeben? – Gazler

+0

Lassen Sie uns wissen, was passiert, wenn Sie das Formular absenden? Siehst du einen Fehler? Zeigt die Konsole etwas? Können Sie das gesamte Benutzermodell posten? –

+0

@Gazler Danke, es hat gefehlt :) Hinzugefügt und alles hat gut funktioniert. –

Antwort

0

Ich habe locale_id zu

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 

und alles lief.

Verwandte Themen