次の XML 構造があります。
<agencies>
<city>
<name>New York</name>
<address>Street A, 101</address>
<phone>111-222-333</phone>
</city>
<city>
<name>Chicago</name>
<address>Street B, 201</address>
<phone>111-222-333</phone>
</city>
</agencies>
そして、それを操作するRubyクラスを作成しようとしています。
クラスファイルを作成しました:
require 'nokogiri'
class Agency
def initialize(arg)
@file = arg.gsub(/-/,'_')
@doc = Nokogiri::XML(open("db/agencies/#{@file}.xml"))
end
def find_offices
@doc.xpath('//agencies/city').map do |i|
{ 'name' => xpath('name') }
end
#@entries = @doc.xpath('//agencies/city').map do |i|
# { 'name' => xpath('name').inner_text, 'address' => xpath('address').inner_text, 'phone' => xpath('phone').inner_text }
#end
end
end
私のコントローラーには次のものがあります。
class AgenciesController < ApplicationController
def index
@prefectures = Prefecture.all
end
def list
@prefecture = Agency.new(params[:prefecture_name])
@offices = @prefecture.find_offices
end
end
list
メソッドは次のエラーを返します。
NoMethodError in AgenciesController#list
undefined method `xpath' for #<Agency:0x9e7f280>
Rails.root: /home/kleber/projects/rails_apps/job_board2
Application Trace | Framework Trace | Full Trace
app/models/agency.rb:13:in `block in find_offices'
app/models/agency.rb:12:in `map'
app/models/agency.rb:12:in `find_offices'
app/controllers/agencies_controller.rb:9:in `list'