1

我正在尝试在我的建筑物中为网络创建红宝石轨道。我想用具有多个端口的交换机来设置它,并且每个端口都有一个名称,插孔和空间。我在Ruby on Rails项目中遇到了一些麻烦

我发现了试图查看一个开关时以下错误:

undefined method `port' for #<Switch:0x2b49d7643c90> 

提取的源(围绕线#2):

1: <h1><%= @switch.title %></h1> 
2: <p><strong>Switch :</strong> <%= @switch.port.name %><br /> 
3: </p> 
4: <p><%= @switch.description %></p> 
5: <hr /> 

这是我的控制器方法:

class SwitchController < ApplicationController 
    def list 
      @switches = Switch.find(:all) 
    end 
    def show 
      @switch = Switch.find(params[:id]) 
    end 
    def new 
      @switch = Switch.new 
    end 
    def create 
      @switch = Switch.new(params[:switch]) 
      if @switch.save 
        redirect_to :action => 'list' 
      else 
        @ports = Port.find(:all) 
        render :action => 'new' 
      end 
    end 
    def edit 
      @switch = Switch.find(params[:id]) 
      @ports = Port.find(:all) 
    end 
    def update 
      @switch = Switch.find(params[:id]) 
      if @switch.update_attributes(params[:switch]) 
        redirect_to :action => 'show', :id => @switch 
      else 
        @ports = Port.find(:all) 
        render :action => 'edit' 
      end 
    end 
    def delete 
      Switch.find(params[:id]).destroy 
      redirect_to :action => 'list' 
    end 
    def show_ports 
      @port = Port.find(params[:id]) 
    end 

end

这里是我的模型:

class Switch < ActiveRecord::Base 
    has_many :ports 
    validates_uniqueness_of :title 
end 

class Port < ActiveRecord::Base 
    belongs_to :switch 
    validates_presence_of :name 
    validates_presence_of :jack 
    validates_presence_of :room 
end 

这里是我的迁移:

class Switches < ActiveRecord::Migration 
    def self.up 
    create_table :switches do |t| 
     t.string  :title 
     t.text  :description 
    end 
    end 
    def self.down 
    drop_table :switches 
    end 
end 

class Ports < ActiveRecord::Migration 
    def self.up 
    create_table :ports do |t| 
     t.string  :name 
     t.string  :jack 
     t.string  :room 
    end 
    Port.create :name => "1/0/1" 
    end 
    def self.down 
    drop_table :ports 
    end 
end 

最后,这里是我的show.html.erb

<h1><%= @switch.title %></h1> 
<p><strong>Switch :</strong> <%= @switch.port.name %><br /> 
</p> 
<p><%= @switch.description %></p> 
<hr /> 
<%= link_to 'Back', {:action => 'list'} %> 

我知道我失踪一些关键的代码,预先感谢任何帮助!

回答

1

如果交换机有很多端口,则不存在属性port,只是ports,它是一个集合(零个,一个或多个端口)。

+0

谢谢,这非常有帮助!我已经转向RoR的新版本,但您的建议仍然有用。 –

1

看起来问题是,当您需要访问@switch.ports(注意复数形式)时,您试图访问@switch.port。由于交换机具有多个端口,因此该关系具有复数名称。要在您的视图中为每个端口打印一些内容,您需要这样的内容:

<h1><%= @switch.title %></h1> 
<%- @switch.ports.each do |port| %> 
    <p><strong>Switch :</strong> <%= port.name %><br /> 
    </p> 
<%- end %> 
<p><%= @switch.description %></p> 
<hr /> 
<%= link_to 'Back', {:action => 'list'} %> 
+0

谢谢!正如我上面所说的,我已经转向更新版本的RoR,但仍然遇到一些问题,但这仍然是必要的。 –

相关问题