2011-01-11 13 views
0

以前の助けを受けてくれてありがとう。私はこれがかなり疑問な質問になると思うだろうが、私が持っている問題であり、私はそれを理解できないようだ。RORサブサブリソースの問題

基本的には、 私はいくつかの病院でファイアウォールとそのゾーン/インターフェイスを追跡しています。私のモデルは次のようになります

Hospital 
    |--> Firewall 
     |--> fwzones 

私は新しいフォーム以外のほとんどすべてを得ています。ここ

mine::Application.routes.draw do 

    resources :hospitals do 
    resources :firewalls do 
     resources :fwzones 
    end 
    end 
end 

hospital.rb

class Hospital < ActiveRecord::Base 
    has_many :firewalls, :dependent => :destroy 
end 

firewall.rb私のroutes.rbをある

class Firewall < ActiveRecord::Base 
    belongs_to :hospital 
    has_many :fwzones 
end 

fwzone.rb

class Fwzone < ActiveRecord::Base 
    belongs_to :firewall 
end 

fwzoneのcontoller

class FwzonesController < ApplicationController 
.... 
    def new 
    @hospital = Hospital.find(params[:hospital_id]) 
    @firewall = @hospital.firewalls.find(params[:firewall_id]) 
    @fwzone = @firewall.fwzones.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @fwzone } 
    end 
    end 
.... 
end 

私は

<%= form_for([@hospital,@hospital.firewalls.fwzones.build]) do |f| %> 

Error: undefined method `fwzones' for #<Class:0x1bba030> 
------------------- 
<%= form_for([@firewall,@firewalls.fwzones.build]) do |f| %> 
<%= form_for([@hospital,@firewalls.fwzones.build]) do |f| %> 

Error: undefined method `fwzones' for nil:NilClass 
------------------- 
<%= form_for([@hospital.firewalls,@fwzones]) do |f| %> 

Error: undefined method `model_name' for NilClass:Class 

を試してみました形式の文字列私はそれが病院やファイアウォールモデルとは何かを持っていますが、私は本当にそれを把握することができないことを前提としています。どんな助けもありがとうございます。ああ、私たちがそこにいる間、私のレーキのルートがあります。

hospital_firewall_fwzones GET /hospitals/:hospital_id/firewalls/:firewall_id/fwzones(.:format)   {:action=>"index", :controller=>"fwzones"} 
    hospital_firewall_fwzones POST /hospitals/:hospital_id/firewalls/:firewall_id/fwzones(.:format)   {:action=>"create", :controller=>"fwzones"} 
new_hospital_firewall_fwzone GET /hospitals/:hospital_id/firewalls/:firewall_id/fwzones/new(.:format)  {:action=>"new", :controller=>"fwzones"} 
edit_hospital_firewall_fwzone GET /hospitals/:hospital_id/firewalls/:firewall_id/fwzones/:id/edit(.:format) {:action=>"edit", :controller=>"fwzones"} 
    hospital_firewall_fwzone GET /hospitals/:hospital_id/firewalls/:firewall_id/fwzones/:id(.:format)  {:action=>"show", :controller=>"fwzones"} 
    hospital_firewall_fwzone PUT /hospitals/:hospital_id/firewalls/:firewall_id/fwzones/:id(.:format)  {:action=>"update", :controller=>"fwzones"} 
    hospital_firewall_fwzone DELETE /hospitals/:hospital_id/firewalls/:firewall_id/fwzones/:id(.:format)  {:action=>"destroy", :controller=>"fwzones"} 
      hospital_firewalls GET /hospitals/:hospital_id/firewalls(.:format)        {:action=>"index", :controller=>"firewalls"} 
      hospital_firewalls POST /hospitals/:hospital_id/firewalls(.:format)        {:action=>"create", :controller=>"firewalls"} 
     new_hospital_firewall GET /hospitals/:hospital_id/firewalls/new(.:format)       {:action=>"new", :controller=>"firewalls"} 
     edit_hospital_firewall GET /hospitals/:hospital_id/firewalls/:id/edit(.:format)      {:action=>"edit", :controller=>"firewalls"} 
      hospital_firewall GET /hospitals/:hospital_id/firewalls/:id(.:format)       {:action=>"show", :controller=>"firewalls"} 
      hospital_firewall PUT /hospitals/:hospital_id/firewalls/:id(.:format)       {:action=>"update", :controller=>"firewalls"} 
      hospital_firewall DELETE /hospitals/:hospital_id/firewalls/:id(.:format)       {:action=>"destroy", :controller=>"firewalls"} 
        hospitals GET /hospitals(.:format)              {:action=>"index", :controller=>"hospitals"} 
        hospitals POST /hospitals(.:format)              {:action=>"create", :controller=>"hospitals"} 
       new_hospital GET /hospitals/new(.:format)             {:action=>"new", :controller=>"hospitals"} 
       edit_hospital GET /hospitals/:id/edit(.:format)            {:action=>"edit", :controller=>"hospitals"} 
        hospital GET /hospitals/:id(.:format)             {:action=>"show", :controller=>"hospitals"} 
        hospital PUT /hospitals/:id(.:format)             {:action=>"update", :controller=>"hospitals"} 
        hospital DELETE /hospitals/:id(.:format)             {:action=>"destroy", :controller=>"hospitals"} 

答えて

1

ここでは、多くのファイアウォール

<%= form_for([@hospital,@hospital.firewalls.fwzones.build]) do |f| %> 

にfwzonesを呼んでいると

<%= form_for([@hospital, @firewall, @firewall.fwzones.build]) do |f| %> 

する必要があります他の人には、複数形と非existant変数の単なるランダムな推測です。

あなたは自分のやり方を推測しているようですが、私はあなたが本を買ってあなたのやり方を学ぶことを勧めます。あなたは長期的に多くの時間を節約します。

http://pragprog.com/titles/rails4/agile-web-development-with-rails

+0

ありがとうございます。私は実際には2本のルビー本を持っていますが、レールについてはあまり話していないので、本当に面倒です。 –

+0

それはすぐに問題を解決しましたが、現在、モデル病院はfwzoneのどのような方法にも対応していません –