0

2 つのテーブル (ノードとエージェント) があります。nodes属してagentsいる。Rails プロジェクトをプルするスクリプトがあり、ActiveRecord から値をプルしようとしています。私が求めていることは、コントローラーでもビューでも、cli スクリプトでも機能するはずだと思います。したがって、私のスクリプトは次のようになります。

#!/usr/bin/env ruby

require '/Users/hseritt/devel/rails_projects/monitor_app/config/environment'

banner = "Banner running..."
script_dir = '/devel/rails_projects/monitor_app/monitor/bin'

class Runner

attr_accessor :banner, :agents, :agent_module, :nodes

def initialize(banner, script_dir)
    @banner = banner
    @agents = Agent.all
    @nodes = Node.all
    @script_dir = script_dir
end

def run
    puts @banner
    @agents.each do |agent|
        if agent.active?
            agent_module = '%s/%s' % [@script_dir, agent.name]
            require agent_module

            @nodes.each do |node|
                if node.agent == agent
                    puts node.name
                end
            end
                            #
            # HERE IS THE ISSUE:
            # ns = Node.find_by_agent_id(agent.id)
            # ns.each do |node|
            #   puts node.name
            # end
            # 
            # yields this error:
            #`method_missing': undefined method `each' for #<Node:0x007fe4dc4beba0> (NoMethodError)
            # I would think `ns` here would be itterable but it doesn't seem that way.
        end
    end
end
end

if $0 == __FILE__
    runner = Runner.new(banner, script_dir)
    runner.run  
end

つまり、これは run メソッドにあります。コメントアウトされていないブロックですが、エージェントを反復するたびに毎回ノードを反復する必要があるため、これは良い解決策ではありません。コメントアウトされたブロックは論理的に見えましたが、エラーがスローされます。おそらくここで正しいことをグーグルで検索するのに問題があると思います。ここで何が欠けていますか?

4

1 に答える 1

0
Node.find_all_by_agent_id

「all」を使用しない場合は、最初の要素のみを取ります

于 2013-03-28T22:28:52.880 に答える