我正在嘗試使用 Partial 將表單呈現到編輯和創建視圖中(以處理這兩個操作)。問題是它適用于創建操作,但表單不能用于編輯,它只能創建。似乎應用程式默認忽略并使用創建操作(提交按鈕自動命名為“創建費用”而不是“更新費用”)。
通過使用這種路線,我想編輯一個費用(與類別鏈接)。

我像這樣從類別顯示視圖導航到我的費用編輯表單視圖。
<% @category.expenses.each do |expense| %>
<tr>
<td><%= expense.name %></td>
<td>
<%= link_to "Edit", edit_category_expense_path(@category, expense) %>
</td>
</tr>
<% end %>
我正在使用 Partial 將我的表單呈現到費用編輯視圖中。
<h1>Edit Expenses</h1>
<%= render "form", expense: @expense %>
那么我的表格就是這樣。
<%= form_with model: [ @category, @expense] do |form| %>
<p>
<%= form.label :name %><br>
<%= form.text_field :name %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
我的費用控制器
def edit
@expense = Expense.find(params[:id])
@category = @expense.category
end
def new
@expense = @category.expenses.new
end
最后,我在我的類別顯示視圖中呈現創建表單。
<h2>Add Expense:</h2>
<%= render 'expenses/form' %>
但是undefined method 'model_name' for nil:NilClass當我嘗試訪問我的類別顯示視圖時,我得到了
基于@Chiperific 答案的解決方案
根據我的專案結構,我不得不放入@expense = Expense.new類別控制器的顯示動作。那是我展示表格的地方。
至于編輯表單,@Chiperific 的回答完美詮釋了
謝謝
uj5u.com熱心網友回復:
.build實體化一條新記錄。Rails 識別出該記錄是新的,而不是持久的,并自動執行您所看到的操作(將表單資料發送到#new操作并使用“創建”作為按鈕語言。
在您的控制器中,您需要獲取要編輯的現有記錄:
...
def new
@expense = @category.expenses.new
end
def edit
@expense = Expense.find(params[:id])
end
并調整您的表格:
<%= form_with model: [ @category, expense ] do |form| %>
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526702.html
標籤:轨道上的红宝石
