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,但仍然遇到一些問題,但這仍然是必要的。 –

相關問題