我正在尝试在我的建筑物中为网络创建一个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'} %>
我知道我在某个地方错过了一些重要的代码,提前感谢您的帮助!
答案 0 :(得分:1)
如果交换机有多个端口,则没有属性port
,只有ports
,这是一个集合(零个,一个或多个端口)。
答案 1 :(得分: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'} %>