1

同様の質問/回答をいくつか読みましたが、バグに対する回答が見つかりません。

仕事の時間を入力するためのフォームと、時間レコードを編集するためのフォームがあります。add と edit の両方が、Rails のガイドラインに従ってパーシャルを共有します。追加 (新規) フォームは正常に機能します。編集フォームを送信すると、エラー/バグが発生します:

Unknown Action
The action '11' could not be found for HoursController

この画面には他に何も出力されません。

これらの画面に表示される URL は次のとおりです。

http://localhost:3000/hours/11/edit

提出後:

http://localhost:3000/hours/11

私の編集フォームのフォームタグは次のとおりです。

<%= form_for(:hour, :url => {:action => 'update', :id => @hour.id}) do |f| %>

これは、「時間」コントローラーの「更新」アクションに移動する必要があります。コントローラーに何か問題があるのか​​もしれませんが、追加/新規フォームは正常に機能します...混乱します...

私のコントローラー:

class HoursController < ApplicationController

  before_filter :confirm_logged_in

  def index
  end

  def list
    if !params[:job_id].nil?
      @hours = Hour.where(["job_id = ?",params[:job_id]]).date_sorted
    else
      @hours = Hour.date_sorted
    end
  end

  def show
    @hour = Hour.find(params[:id])
  end

  def new
    @hour = Hour.new
  end

  def create
    @hour = Hour.new(params[:hours])
    if @hour.save
      job = Job.find(params[:hours][:job_id])
      flash[:notice] = "You have just entered hours for #{job.name}"
      redirect_to(:action => "list", :job_id => params[:hours][:job_id])
    else
      flash[:notice] = "There were one or more problems with your form. Please try again!"
      render('new')
    end
  end

  def edit
    @hour = Hour.find(params[:id])
  end

  def update
    @hour=Hour.find(params[:id])
    if @hour.update_attributes(params[:hour])
      flash[:notice] = "You have just updated an Hours entry"
      redirect_to(:action => "list", :job_id => params[:hours][:job_id])
    else
      render("edit")
    end
  end

  def delete
     @hour = Hour.find(id)
  end

  def destroy
    Hour.find(params[:id]).destroy
    flash[:notice] = "Hours Deleted Successfully!"
    redirect_to(:action => 'list')
  end

  def search
    if params[:job][:id]
      @job = Job.find(params[:job][:id])
      redirect_to(:action => "list", :job_id => @job.id)
    end
  end

end

営業時間セクションのマイ ルート ファイル

resources :hours do
    collection do
      get :list
      get :delete
    end
end

それは私に与えます:

list_hours GET    /hours/list(.:format)                  hours#list
     delete_hours GET    /hours/delete(.:format)                hours#delete
            hours GET    /hours(.:format)                       hours#index
                  POST   /hours(.:format)                       hours#create
         new_hour GET    /hours/new(.:format)                   hours#new
        edit_hour GET    /hours/:id/edit(.:format)              hours#edit
             hour GET    /hours/:id(.:format)                   hours#show
                  PUT    /hours/:id(.:format)                   hours#update
                  DELETE /hours/:id(.:format)                   hours#destroy

これを理解する方法についてのアイデアは大歓迎です。--jc

4

2 に答える 2

1

このようにしてみてください

 <% form_for @hours do |f| %>

またはそうでなければ

<% form_for :hours, :url => 
     url_for(:action => "update", :id => @hours) do |f| %>
于 2013-03-19T11:09:49.527 に答える
0

カスタムルートがあったため、私の状況は少し異なりましたが、他の誰か(または将来の私)を助けるかもしれません.

method: :postをフォーム パラメータに追加するまで、そのエラーが発生し続けました。

ルート:

resources :hours do
  member do
    post :fix
  end
end

html.erb

form_for @hour, url: fix_hour_path(@hour), method: :post do
  ...
end
于 2016-03-02T22:03:08.007 に答える