1

建物内のネットワーク用にレール上にRubyを作成しようとしています。多くのポートを備えたスイッチでセットアップしたいと思います。各ポートには名前、ジャック、および部屋があります。

スイッチを表示しようとすると、次のエラーが発生します。

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

終わり

これが私のモデルです:

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'} %>

私はどこかにいくつかの重要なコードが欠けていることを知っています、助けてくれてありがとう!

4

2 に答える 2

1

スイッチに多数のポートがある場合、属性はなくportportsコレクション(ゼロ、1つ、または多数のポート)であるだけです。

于 2012-05-21T17:31:35.947 に答える
1

問題は、アクセス@switch.portする必要があるときにアクセスしようとしていることのようです@switch.ports(複数形に注意してください)。スイッチには多くのポートがあるため、リレーションには複数形の名前が付いています。ビューのポートごとに何かを印刷するには、次のようなものが必要です。

<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'} %>
于 2012-05-21T17:32:36.400 に答える