【发布时间】:2013-08-18 04:23:53
【问题描述】:
错误消息是NoMethodError in Circuit#updateundefined method 'network_address' for nil:NilClass,在我看来与这一行有关:
<td><%= logical_interface.subnet.network_address %></td>
之前一切正常,现在我在重新启动本地服务器时设法破坏了它。
update.rhtml
<table id="logical_interfaces">
<% @logical_interfaces.each do |logical_interface| %>
<tr id="logical_interface_<%= logical_interface.id %>">
<td><%= logical_interface.description %></td>
<td><%= logical_interface.subnet.network_address %></td>
<td><%= logical_interface.bandwidth %></td>
</td>
</tr>
<% end %>
</table>
logical_interface.rb
belongs_to :subnet
belongs_to :circuit
subnet.rb
belongs_to :logical_interface
belongs_to :circuit
电路.rb
has_many :subnets
has_many :logical_interfaces
电路控制器.rb
CRUD 正在另一个模型的控制器内完成,因为这是其他一切运行的主要对象。
def update
....
if params[:id]
@circuit = Circuit.find(params[:id])
end
@logical_interfaces = LogicalInterface.find_all_by_circuit_id(@circuit.id)
....
end
与错误一样常见,我敢打赌这很愚蠢,但我真的无法为自己解决问题,因此非常感谢任何答案。我感觉这与模型之间定义的关系有关,但我可能是错的。
【问题讨论】:
-
您的一条记录
logical_interface没有与之关联的子网,因此当调用logical_interface.subnet.network_address时,它会引发“Nil 没有'network_address' 方法”=> 使用logical_interface.subnet.try(:network_address)来查看如果逻辑接口应该强制使用子网,则哪条记录已损坏并添加验证子网模型上的存在。 -
logical_interface.subnet为零,可能是因为该记录没有与之关联的子网。你得到这个错误是因为你试图调用一个 nil 对象的方法,而 Nil 对象没有那个方法。 -
谢谢,会尝试进一步挖掘,我一定从数据库中删除了一些东西......
标签: ruby-on-rails ruby ruby-on-rails-2