在 Rails 视图中显示 XML 哈希不起作用



我已经将一个 33,364 个条目的 XML 文件缩小到我需要的 1,068 个。 现在,我正在尝试从我已缩小搜索范围的每个节点中收集信息片段,并将每条信息存储在哈希中,以便我可以在rails视图中列出相关数据。

这是我的控制器 (home_controller.rb) 中的代码 --

class HomeController < ApplicationController
# REQUIRE LIBRARIES
require 'nokogiri'
require 'open-uri'
def search
end
def listing
    @properties = {}
    # OPEN THE XML FILE
    mits_feed = File.open("app/assets/xml/mits.xml")
    # OUTPUT THE XML DOCUMENT
    doc = Nokogiri::XML(mits_feed)
    doc.xpath("//Property/PropertyID/Identification[@OrganizationName='northsteppe']").each do |property|
        # GATHER PROPERTY INFORMATION
        information = {
            "street_address" => property.xpath("Address/AddressLine1").text,
            "city" => property.xpath("Address/City").text,
            "zipcode" => property.xpath("Address/PostalCode").text,
            "short_description" => property.xpath("Information/ShortDescription").text,
            "long_description" => property.xpath("Information/LongDescription").text,
            "rent" => property.xpath("Information/Rents/StandardRent").text,
            "application_fee" => property.xpath("Fee/ApplicationFee").text,
            "bedrooms" => property.xpath("Floorplan/Room[@RoomType='Bedroom']/Count").text,
            "bathrooms" => property.xpath("Floorplan/Room[@RoomType='Bathroom']/Count").text,
            "bathrooms" => property.xpath("ILS_Unit/Availability/VacancyClass").text
        }
        # MERGE NEW PROPERTY INFORMATION TO THE EXISTING HASH
        @properties.merge(information)
    end
end
end

我没有收到任何错误,我的视图加载正常,但它拉起空白。 这是我的视图文件(listing.html.erb) --

<div class="propertiesHolder">
<% if @properties %>
    <ul>
        <% @properties.each do |property| %>
            <li><%= property.information.street_address %></li>
        <% end %>
    </ul>
<% else %>
    <h1>There are no properties that match your search</h1>
<% end %>
</div>

有谁知道为什么这可能是空白的? 如果我在代码中做了不正确的事情,我会假设我会收到错误。 我还尝试将"Hello World"作为每个|属性|这也拉起了空白。 谢谢!

Ruby merge 不会改变你的哈希值。它只是将两个哈希值作为一个返回。

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge(h2)
#=> {"a"=>100, "b"=>254, "c"=>300}
h1
#=> {"a"=>100, "b"=>200}

请注意h1如何仍然保留其原始值?

您要做的是将information哈希重命名为 @properties .我建议这样做是因为您要将包含其中信息的哈希(information)与空哈希(@properties)合并。因此,当您合并哈希时,无需覆盖,只需使用第一个哈希即可。

最新更新