This episode answers a student's question about how to use Phoenix forms to create and update things that have belongs_to
or has_one
associations.
The short answer is:
use a <%= inputs_for f, :your_association, fn f2 -> %>
block inside your form and put the labels and inputs for the associated inside of that.
Here's an example form for a User
where users have the fields username and is_activated along with a belongs_to: Credential
association (and the Credential
schema includes a field for email along with the virtual fields password and password_confirmation:
<%= form_for @changeset, @action, fn f -> %>
<%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below.</p>
</div>
<% error_keys = Keyword.keys(f.errors) %>
<%= inspect error_keys %>
<% end %>
<div class="form-group">
<%= label f, :username, class: "control-label" %>
<%= text_input f, :username, class: "form-control" %>
<%= error_tag f, :username %>
</div>
<div class="form-group">
<%= inputs_for f, :credential, fn cf -> %>
<%= label cf, :email, class: "control-label" %>
<%= text_input cf, :email, class: "form-control" %>
<%= error_tag cf, :email %>
<%= label cf, :password, class: "control-label" %>
<%= password_input cf, :password, class: "form-control" %>
<%= error_tag cf, :password %>
<%= label cf, :password_confirmation, class: "control-label" %>
<%= password_input cf, :password_confirmation, class: "form-control" %>
<%= error_tag cf, :password_confirmation %>
<% end %>
</div>
<div class="form-group">
<%= label f, :is_activated, class: "control-label" %>
<%= checkbox f, :is_activated %>
<%= error_tag f, :is_activated %>
</div>
<div class="form-group">
<%= submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>
Also see: Building a CMS YT series
No Comments