0

テーブルの 1 つでオブジェクトの簡単な編集機能を設定しようとしています。オンラインや本で見た現在のコードは次のとおりですが、機能しません

def edit
    @fire_chief = FireChief.find(params[:id])
 end

私がしなければならないことは、リスト ビューで特定の消防署長を編集する方法を理解することだけであり、プログラミングを続けることができますが、行き詰まっています。

私が受け取っているエラーは、「ID なしで FireChief が見つかりませんでした」です。

このコードの小さなスニペットを使用すると、編集フォームがうまくいくことがわかります

def edit
    @fire_chief = FireChief.last
 end

ただし、編集する最後のエントリが常に表示されます。クリックしたエントリをプルする必要があります... 1 番目、3 番目、または 5 番目などである可能性があります。

これは私のルートファイルです:

resource :timesheet do
    resource :command_officer
    resources :fire_chief
    resources :fire_fighters
    resource :safety_officer
    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
end
end

リソース :fire_chief を複数形に変更したので、このリソース :fire_chief になりました

しかし、私は今このエラーが発生しています:

ルーティング エラー

初期化されていない定数 FireChiefController

4

1 に答える 1

1

id必要なデータまたはその他のデータを取得するには、params次の例のように URL 内にデータを渡す必要があります。

/firechief/2/edit

このようにして、editメソッドは ID を認識し、メソッドは機能します。これをルート内で手動で設定して、次のようなルートを作成できます。

get  "/firechief/:firechief_id/edit" => "firechiefs#edit", as => :edit_firechief

またはresources、ルート内で使用している場合は、デフォルトで機能します。

実際に URL 内でデータを渡したくない場合は、セッション ベースのソリューションを実装できます。必要に応じてコントローラー内に を格納するメソッドを作成するか、すでにあるメソッド ( など) 内にセッションを作成する場合は、次の行を追加idします。firechieffirechief#create

session[:firechief] = #here you add the id of the firechief you want to store

コントローラーでこれを行うことができます:

def edit
    @fire_chief = FireChief.find(session[:firechief])
end
于 2012-10-25T16:34:26.780 に答える