我以某种方式破坏了我的Rails应用程序 - 可怕的NoMethod错误

时间:2013-08-15 21:06:24

标签: ruby-on-rails ruby ruby-on-rails-2

错误讯息为NoMethodError in Circuit#update undefined 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

circuit.rb

has_many :subnets
has_many :logical_interfaces

circuit_controller.rb

CRUD正在另一个模型的控制器内部完成,因为这是其他一切都运行的主要对象。

def update

  ....
  if params[:id]
    @circuit = Circuit.find(params[:id])
  end

  @logical_interfaces = LogicalInterface.find_all_by_circuit_id(@circuit.id)
  ....

end

就像虫子一样,我敢打赌这是愚蠢的,但我真的无法为自己解决这个问题,所以我会非常感谢任何答案。我感觉这与模型之间定义的关系有关,但我可能错了。

1 个答案:

答案 0 :(得分:1)

对于subnet

nillogical_interface。在LogicalInterface模型中添加一些验证:

validates_presence_of :subnet

或仅在network_address出现时显示subnet

<td><%= logical_interface.subnet.try(:network_address) %></td>