2013-03-19 3 views
1

Я читал несколько похожих вопросов/ответов, но не могу найти ответы на мои ошибки.Unkown Action - Действие не найдено для Controller

У меня есть форма для ввода часов на работу и одна для редактирования записи часов. Как добавление, так и редактирование разделяют частичные в соответствии с рекомендациями 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 

Любые идеи в том, чтобы понять это было бы значительно apprec iated. --jc

ответ

1

Попробуйте как этот

<% form_for @hours do |f| %> 

или еще

<% form_for :hours, :url => 
    url_for(:action => "update", :id => @hours) do |f| %> 
+0

<% form_for @hours сделать | F | %> –

+0

Я хочу сказать, спасибо. Это сработало. Я слежу за онлайн-учебником, поэтому я понятия не имел, что это проблема. Очень благодарен. <% form_for @hours do | f | %> работал! –

+0

@JohnCowan сказать спасибо, приняв мой ответ в левой части моего ответа –

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 
Смежные вопросы