2012-02-03 14 views
1

でネストされたリソースを使用しているときにエラーをルーティングだから私はサービスにhas_many ステータスRuby on Railsを - フォームヘルパー

関係を持って、私は私のroutes.rbをファイルにこれを持って

resources :services do 
    resources :statuses 
end 

とこれは私のstatuses_controllerファイルです

class StatusesController < ApplicationController 
    def new 
    @status = Status.new(:parent_id => params[:parent_id]) 
    end 

    def create 
    @service = current_user.services.find(params[:id]) 
    @status = Status.new(params[:status]) 
    if @status.save 
     flash[:notice] = "New status created." 
    else 
     flash[:error] = "Error creating new status." 
    end 
    redirect_to service_statuses_path 
    end 
end 

エラーが発生しました:

undefined method `statuses_path' for #<#<Class:0x000001045dbb28>:0x00000104554e48> 

ロードしよう:ファイルビュー/ステータス/ new.html.erbなぜそれはまだ私に未定義のメソッド `statuses_path」を与えている

<%= form_for [@service, @status], :path =>service_statuses_path do |f|%> 
    <%= f.label :status %> 
    <%= f.text_field :state %><br /> 

    <%= f.submit %> 
<% end %> 

http://localhost:3000/services/2/statuses/new 

+0

は、コマンドプロンプトで「すくいルート」を実行し、そこに現れるものを貼り付けることができますSTATUS_ID?これは次のようになります: – PhillipKregg

答えて

0

これが原因であるかどうかわかりません。しかし、あなたは以下のようなパスを生成します

service_statuses_path(@service, @status) 

にメソッド呼び出し

service_statuses_path 

を変更する必要があります。

/サービス/のservice_id /ステータス/

+0

これは次のようになります:{:controller => "statuses"、service_id => nil、:format =>#<状態ID:nil、time:nil、state:nil、message:nil、service_id: created_at:nil、updated_at:nil>} –

+0

あなたは必要ありません:パスオプションhere.Just use <%= form_for [@service、@status] do | f |%> –

+0

ありがとう!それはうまくいった。 –