0

特定のリンクをクリックすると、ブラウザに次の一般的なエラー メッセージが表示されます。

{:action="edit", :controller="timesheets", :incident_id=>nil} に一致するルートはありません

リンクを含むページのコードは次のとおりです (新しいレコードを作成するためのパスを含む)

<div style="float:left;padding:25px;">
<p><%= link_to "Add a Command Officer", new_incident_timesheet_command_officer_path %></p>
</div>

リンクをクリックする前に、ブラウザーの URL は次のように表示されます。

ローカルホスト:3000/インシデント/197/タイムシート/編集

そして、上記のブラウザの URL は完全に理にかなっています。

「指揮官を追加」へのリンクにマウスを合わせると、ブラウザーの下部に次のように表示されます: localhost:3000/incidents/197/timesheets/command_officers/new

しかし、それをクリックすると、冒頭で述べたルーティング エラーが表示されます。Command_Officers_controller とルーティング ファイルのコードを次に示します。

誰かが私を助けるために必要な情報をすべて含めたと思いますが、何か不足している場合はお知らせください. 助けてくれてありがとう

Routes.rb

root :to => "incidents#index"

resources :users
resources :profiles

resources :incidents do

resource :mat_list
member do
post :send_notice
end
member do
get :changestatus
end



resource :timesheet do
    resources :command_officers
    resources :fire_chiefs
    resources :fire_fighters
    resources :safety_officers
    resources :emts
    resources :hazmat_specialists
    resources :command_vehicles
    resources :engines
    resources :emergency_supports
    resources :hazmat_units
    resources :field_units
    resources :pumpers
    resources :tankers
    resources :rescue_units
    resources :ladder_truck75s
    resources :ladder_truck150s
end
end


resource :session do
  member do
  get :resetpass
  post :resetpass
 end
end

command_officers_controller.rb

def new
   @command_officer = CommandOfficer.new
   @timesheet = Incident.find(params[:incident_id]).timesheet

   respond_to do |format|
     format.html # new.html.erb
   end
end

# GET /command_officers/1/edit
def edit
   @command_officer = CommandOfficer.find(params[:id])
end

# POST /command_officers
# POST /command_officers.xml
def create
   # @new_command_officer = CommandOfficer.new(params[:command_officer])
  @timesheet = Incident.find(params[:incident_id]).timesheet
      @command_officer = @timesheet.command_officer.build(params[:command_officer])

  respond_to do |format|
    if @command_officer.save
               format.html { redirect_to(edit_incident_timesheet_path, :notice => 'Command officer was successfully created.') }
    else
        flash[:error] = "What happened?"
        format.html { render :new }
        end
end
 end
4

2 に答える 2

1

ネストされたルートを実行しましたが、インシデント ID を渡しませんでした。 というインスタンス変数がある場合は@incident、次のようにすることができます。

<%= link_to "Add a Command Officer", new_incident_timesheet_command_officer_path(@incident) %>
于 2013-03-27T15:28:46.137 に答える
1

問題は、その次のページにリンクを生成しようとしているのに、レールに渡すインシデント ID が nil であることです。ビュー/コントローラーを確認し、問題のあるコードを削除/修正してください。

より一般的には、Rails が提供するスタック トレースを読み取る方法を学び、これらを自分で追跡できるようにします。

于 2013-03-27T15:29:36.243 に答える