2017-09-23 84 views
-1

我想创建一个红宝石应用程序来检查服务器状态是否启动或关闭。 后来我会找到一种方法来适应我的json路径,以便找到不同语法中的一种方法。但现在,我坚持用脏“未定义的方法`每个”近亲:NilClass”未定义的方法`each'for nil:NilClass - 但是为什么?

平控制器:

def index 
    @pings = Ping.all 
    end 

    def new 
    @service = Ping.new 
    end 

    def create 
    @ping = Ping.new(ping_params) 
    @ping.service = @service 
    @ping.up = test_ping 
    @ping.save 
    end 

    def test_ping 
    require 'json' 
    require 'open-uri' 

    url = 'https://www.facebook.com/platform/api-status/' 
    fb_status_serialized = open(url).read 
    fb_status = JSON.parse(fb_status_serialized) 

    if fb_status['current']['health'] == 1 
     test_ping = true 
    else 
     test_ping = false 
    end 
    end 

    private 

    def ping_params 
    params.require(:ping).permit(:service_id, :up) 
    end 

    def set_ping 
    @ping = Ping.find(params[:ping_id]) 
    end 
end 

服务控制器:

(这里是我的设置为服务我想补充)

class ServiceController < ApplicationController 

    before_action :set_service, only: [:edit, :show, :destroy] 

    def index 
    @services = Service.all 
    end 

    def new 
    @service = Service.new 
    end 

    def edit 
    end 

    def show 
    end 

    def create 
    @service = Service.new(service_params) 
    @service.save 
     if @service.save 
    redirect_to service_path(@service) 
    else 
     render :new 
    end 
    end 

    def destroy 
    @service.destroy 
    @service.destroy 
    redirect_to services_path 
    end 

private 
    def set_service 
     @service = Service.find(params[:id]) 
    end 
    def service_params 
     params.require(:service).permit(:name, :web_api, :json_path) 
    end 

end 

视图(服务指数):

<%= @services.each do | s | %> 
    <p><%= s.name %></p> 
    <p><%= s.web_api %></p> 
    <p><%= s.json_path %></p> 
    <p><%= s.id %></p> 

    <%= @pings.each do | p | %> 
    <%# if p.service_id == s.id %> 
    <!-- undefined --> 
    <% end %> 

    <p>|||</p> <%= Ping.new(up: true, service: s) %> <p>|||</p> 
<% end %> 
+2

哪里是'被定义services'? –

+0

@sebastianpalma我添加了服务控制器 – Doge

+0

什么控制器对应你添加到问题的视图? –

回答

2

您正在尝试迭代@services迭代中的@pings,但这尚未定义,您只定义了服务,并且如果each所在的对象正在执行,则ping中的迭代将不起作用应用了nil值。

无论是你使用渲染视图控制器,你需要定义两个实例变量,尝试用:

def index 
    @services = Service.all 
    @pings = Ping.all 
end 
+0

只是,它的工作,谢谢 – Doge

相关问题