所以我有兩個模型,報告和收據。每份報告都有許多收據。我使用腳手架來生成我所有的視圖和內容,但我正在改變事物,以便在用戶創建新報表或編輯新報表時,他們可以在表單中創建和編輯收據。如何在rails 3.2中創建和編輯嵌套對象?
我的模型建立:
class Report < ActiveRecord::Base
has_many :receipts, :dependent => :destroy
accepts_nested_attributes_for :receipts, :allow_destroy => true
attr_protected :id
end
class Receipt < ActiveRecord::Base
belongs_to :report
attr_protected :id
validates_presence_of :vendor, :date, :description, :amount, :acctCode
end
我有如下形式成立創建一個新的收據:
<%= form_for @report do |f| %>
....
<%= f.fields_for :receipts, Receipt.new do |receipt| %>
...
<% end %>
<% end %>
但每次我去救人報告時,我得到一個路由錯誤:
No route matches {:action=>"edit", :controller=>"receipts", :report_id=>#<Receipt id: nil, date: nil, vendor: "", description: "", amount: nil, companyCard: false, lobbyingExpense: false, acctCode: "", created_at: nil, updated_at: nil, report_id: 2>}
和我的路由設置爲:
resources :reports do
resources :receipts
end
和我的收據控制器具有
# GET /receipts/new
def new
@receipt = Receipt.new
respond_to do |format|
format.html # new.html.erb
end
end
# GET /receipts/1/edit
def edit
@receipt = Receipt.find(params[:id])
end
# POST /receipts
def create
@receipt = Receipt.new(params[:receipt])
respond_to do |format|
if @receipt.save
format.html { redirect_to @receipt.Report, notice: 'Receipt was successfully created.' }
else
format.html { render action: "new" }
end
end
end
我還沒有接觸軌在一段時間,所以林不知道林做錯了。但在我的舊應用程序(3.1)中,當我添加圖像說,博客文章時,我甚至沒有控制器的圖像,而不是通過ajax刪除它們。我在這裏有收款人的唯一理由是因爲我使用腳手架來產生觀點等。
編輯 - 我還要指出,如果我去新收到的看法,我得到的表單標籤的錯誤:如果您正在使用accepts_nested_attributes_for
你不需要額外的
<%= form_for(@receipt) do |receipt| %>
undefined method `receipts_path'
提供創建/更新操作的代碼。在我看來問題不在於形式。然而你的f.fields_for很奇怪。 –
我會使用'@ report.receipts.build'而不是'Receipt.new'。不要以爲這會解決你的問題。 – Azolo
添加我的收據控制器。還有 - @ report.receipts.build實際上給了我相同的路由錯誤... – rugbert