したがって、Reports と Receipts の 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 を介して画像を削除する以外に、画像のコントローラーさえありませんでした。ここでレシート用のコントローラーを用意した唯一の理由は、ビューなどを生成するために scaffold を使用したからです。
編集 - 新しいレシート ビューに移動すると、フォーム タグでエラーが発生することも指摘しておく必要があります。
<%= form_for(@receipt) do |receipt| %>
undefined method `receipts_path'