首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROR子子资源形成故障

ROR子子资源形成故障
EN

Stack Overflow用户
提问于 2011-01-12 07:57:06
回答 1查看 513关注 0票数 0

感谢大家之前的帮助。我将假设这将是一个很好的n00bish问题,但这是我的问题,我似乎无法解决它。

基本上,我正在跟踪几家医院的防火墙和它们的区域/接口。所以我的模型看起来像

代码语言:javascript
复制
Hospital
   |--> Firewall
      |--> fwzones

除了新的表单,我几乎把所有的事情都弄清楚了。

这是我的routes.rb

代码语言:javascript
复制
mine::Application.routes.draw do

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

hospital.rb

代码语言:javascript
复制
class Hospital < ActiveRecord::Base
    has_many :firewalls, :dependent => :destroy
end

firewall.rb

代码语言:javascript
复制
class Firewall < ActiveRecord::Base
  belongs_to :hospital
  has_many :fwzones
end

fwzone.rb

代码语言:javascript
复制
class Fwzone < ActiveRecord::Base
  belongs_to :firewall
end

fwzone控制程序

代码语言:javascript
复制
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

我尝试过的表单字符串

代码语言:javascript
复制
<%= 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

我认为这与医院或防火墙模型有关,但我真的搞不清楚。任何帮助都是非常感谢的。哦,这是我的瑞克路线,而我们在那里。

代码语言:javascript
复制
    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"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-12 08:16:21

在这里,您在许多防火墙上调用fwzone

代码语言:javascript
复制
<%= form_for([@hospital,@hospital.firewalls.fwzones.build]) do |f| %>

而且应该是

代码语言:javascript
复制
<%= form_for([@hospital, @firewall, @firewall.fwzones.build]) do |f| %>

其他的只是对复数和不存在的变量的随机猜测。

你看起来确实是在猜测你的方式,我建议你买一本书,学习你的方式。从长远来看,你会节省很多时间。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4664035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档