0
我有兩個具有has_many關係的模式。 帖子:Ecto:提供給inputs_for的關聯值具有不同的順序
schema "blog_posts" do
field :body, :string
has_many :notes, MyProject.Blog.Note, foreign_key: :blog_post_id
timestamps()
end
和注:
schema "blog_notes" do
field :title, :string
belongs_to :post, MyProject.Blog.Post, foreign_key: :blog_post_id
timestamps()
end
在PostController中進行編輯操作我與相關注釋加載後:
def edit(conn, %{"id" => id}) do
post = Repo.get!(Post, id) |> Repo.preload(:notes)
IO.inspect post
changeset = Blog.change_post(post)
render(conn, "edit.html", post: post, changeset: changeset)
end
表單模板看起來是這樣的:
<%= 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>
<% end %>
<div class="form-group">
<%= label f, :body, class: "control-label" %>
<%= textarea f, :body, class: "form-control" %>
<%= error_tag f, :body %>
</div>
<%= inputs_for f, :tags, fn fa -> %>
<div class="form-group">
<%= label fa, :title, class: "control-label" %>
<%= text_input fa, :title, class: "form-control" %>
<%= error_tag fa, :title %>
</div>
<%= end %>
<%= end %>
<div class="form-group">
<%= submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>
問題在於,當我打開帖子編輯表單並添加了一些備註時,它按照與添加的順序不同的順序顯示備註,看起來Ecto預先關聯了不關注訂單的相關備註。有沒有簡單的方法讓Ecto按照添加順序保存相關模型?
謝謝,它很優雅。很高興看到有繼續使用預加載功能的方式。 – AndreyKo