草庐IT

xml - 验证具有空属性的 XML 模式

coder 2024-07-01 原文

我在验证我的 xml 架构时遇到问题。

我在架构上遇到这些错误

113: 18 s4s-elt-invalid-content.1: The content of '#AnonType_user' is invalid.

164: 17 s4s-elt-invalid-content.1: The content of '#AnonType_festival' is invalid. Element 'sequence' is invalid, misplaced, or occurs too often.

由于这 2 个错误,我收到了大量相同的错误。这是因为节日标签的属性 id 可能为空,因为没有该节日的数据

cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'.

cvc-attribute.3: The value '' of attribute 'id' on element 'festival' is not valid with respect to its type, 'integer'.

架构中导致问题的行是

<xs:element name="user">
  <xs:complexType>
 <xs:attribute name="id" type="xs:integer"/>
   <xs:sequence>
  <xs:element ref="personal"/>
  <xs:element ref="account"/> 
   </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="festival">
  <xs:complexType>
 <xs:attribute name="id" type="xs:integer" user="optional"/>
  <xs:sequence>
   <xs:element ref="event"/>
   <xs:element ref="contact"/> 
 </xs:sequence>
  </xs:complexType>
</xs:element>

这是我的 XML 文件中的一个片段。一个用户有节日而另一个没有

<member>
 <user id="3">
  <personal>
   <name>Skye Saunders</name>
   <sex>Female</sex>
   <address1>31 Anns Court</address1>
   <address2></address2>
   <city>Cirencester</city>
   <county>Gloucestershire</county>
   <postcode>GL7 1JG</postcode>
   <telephone>01958303514</telephone>
   <mobile>07260491667</mobile>
   <email>bigundecided@hotmail.co.uk</email>
  </personal>
  <account>
   <username>BigUndecided</username>
   <password>ea297847f80e046ca24a8621f4068594</password>
   <userlevel>2</userlevel>
   <signupdate>2010-03-26T09:23:50</signupdate>
  </account>
 </user>
 <festival id="">
  <event>
   <eventname></eventname>
   <url></url>
   <datefrom></datefrom>
   <dateto></dateto>
   <location></location>
   <eventpostcode></eventpostcode>
   <coords>
    <lat></lat>
    <lng></lng>
   </coords>
  </event>
  <contact>
   <conname></conname>
   <conaddress1></conaddress1>
   <conaddress2></conaddress2>
   <concity></concity>
   <concounty></concounty>
   <conpostcode></conpostcode>
   <contelephone></contelephone>
   <conmobile></conmobile>
   <fax></fax>
   <conemail></conemail>
  </contact>
 </festival>
</member>
<member>
 <user id="4">
  <personal>
   <name>Connor Lawson</name>
   <sex>Male</sex>
   <address1>12 Ash Way</address1>
   <address2></address2>
   <city>Swindon</city>
   <county>Wiltshire</county>
   <postcode>SN3  6GS</postcode>
   <telephone>01791928119</telephone>
   <mobile>07338695664</mobile>
   <email>itunestinker@fsmail.co.uk</email>
  </personal>
  <account>
   <username>iTuneStinker</username>
   <password>3a1f5fda21a07bfff20c41272bae7192</password>
   <userlevel>3</userlevel>
   <signupdate>2010-03-26T09:23:50</signupdate>
  </account>
 </user>
 <festival id="1">
  <event>
   <eventname>Oxford Folk Festival</eventname>
   <url>http://www.oxfordfolkfestival.com/</url>
   <datefrom>2010-04-07</datefrom>
   <dateto>2010-04-09</dateto>
   <location>Oxford</location>
   <eventpostcode>OX19BE</eventpostcode>
   <coords>
    <lat>51.735640</lat>
    <lng>-1.276136</lng>
   </coords>
  </event>
  <contact>
   <conname>Stuart Vincent</conname>
   <conaddress1>P.O. Box 642</conaddress1>
   <conaddress2></conaddress2>
   <concity>Oxford</concity>
   <concounty>Bedfordshire</concounty>
   <conpostcode>OX13BY</conpostcode>
   <contelephone>01865 79073</contelephone>
   <conmobile></conmobile>
   <fax></fax>
   <conemail>stewards@oxfordfolkfestival.com</conemail>
  </contact>
 </festival>
</member>

这是我的架构

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:simpleType name="postcode">
  <xs:restriction base="xs:string">
   <xs:minLength value="6"/>
   <xs:maxLength value="8"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="telephone">
  <xs:restriction base="xs:string">
   <xs:minLength value="10"/>
   <xs:maxLength value="13"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="mobile">
  <xs:restriction base="xs:string">
   <xs:minLength value="11"/>
   <xs:maxLength value="11"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="password">
  <xs:restriction base="xs:string">
   <xs:minLength value="32"/>
   <xs:maxLength value="32"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="userlevel">
  <xs:restriction base="xs:integer">
   <xs:enumeration value="1"/>
   <xs:enumeration value="2"/>
   <xs:enumeration value="3"/>
   <xs:enumeration value="4"/>
  </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="county">
  <xs:restriction base="xs:string">
   <xs:enumeration value="Bedfordshire"/>
   <xs:enumeration value="Berkshire"/>
   <xs:enumeration value="Bristol"/>
   <xs:enumeration value="Buckinghamshire"/>
   <xs:enumeration value="Cambridgeshire"/>
   <xs:enumeration value="Cheshire"/>
   <xs:enumeration value="Cleveland"/>
   <xs:enumeration value="Cornwall"/>
   <xs:enumeration value="Cumberland"/>
   <xs:enumeration value="Derbyshire"/>
   <xs:enumeration value="Devon"/>
   <xs:enumeration value="Dorset"/>
   <xs:enumeration value="Durham"/>
   <xs:enumeration value="East Ridings Of Yorkshire"/>
   <xs:enumeration value="Essex"/>
   <xs:enumeration value="Gloucestershire"/>
   <xs:enumeration value="Hampshire"/>
   <xs:enumeration value="Herefordshire"/>
   <xs:enumeration value="Hertfordshire"/>
   <xs:enumeration value="Huntingdonshire"/>
   <xs:enumeration value="Isle Of Man"/>
   <xs:enumeration value="Kent"/>
   <xs:enumeration value="Lancashire"/>
   <xs:enumeration value="Leicestershire"/>
   <xs:enumeration value="Lincolnshire"/>
   <xs:enumeration value="London"/>
   <xs:enumeration value="Middlesex"/>
   <xs:enumeration value="Norfolk"/>
   <xs:enumeration value="North Yorkshire"/>
   <xs:enumeration value="Northamptonshire"/>
   <xs:enumeration value="Northumberland"/>
   <xs:enumeration value="Nottinghamshire"/>
   <xs:enumeration value="Oxfordshire"/>
   <xs:enumeration value="Rutland"/>
   <xs:enumeration value="Shropshire"/>
   <xs:enumeration value="Somerset"/>
   <xs:enumeration value="South Yorkshire"/>
   <xs:enumeration value="Staffordshire"/>
   <xs:enumeration value="Suffolk"/>
   <xs:enumeration value="Surrey"/>
   <xs:enumeration value="Sussex"/>
   <xs:enumeration value="Tyne and Wear"/>
   <xs:enumeration value="Warwickshire"/>
   <xs:enumeration value="West Yorkshire"/>
   <xs:enumeration value="Westmorland"/>
   <xs:enumeration value="Wiltshire"/>
   <xs:enumeration value="Wirral"/>
   <xs:enumeration value="Worcestershire"/>
   <xs:enumeration value="Yorkshire"/>
  </xs:restriction>
 </xs:simpleType> 

 <xs:element name="folktask">
  <xs:complexType>
   <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="unbounded" ref="member"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="member">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="user" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="festival" minOccurs="0" maxOccurs="unbounded"/>  
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:element name="user">
   <xs:complexType>
  <xs:attribute name="id" type="xs:integer"/>
    <xs:sequence>
   <xs:element ref="personal"/>
   <xs:element ref="account"/> 
    </xs:sequence>
   </xs:complexType>
 </xs:element>

 <xs:element name="personal">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="name"/>
    <xs:element ref="sex"/>
    <xs:element ref="address1"/>
    <xs:element ref="address2"/>
    <xs:element ref="city"/>
    <xs:element ref="county"/>
    <xs:element ref="postcode"/>
    <xs:element ref="telephone"/>
    <xs:element ref="mobile"/>
    <xs:element ref="email"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="name" type="xs:string"/>
 <xs:element name="sex" type="xs:string"/>
 <xs:element name="address1" type="xs:string"/>
 <xs:element name="address2" type="xs:string"/>
 <xs:element name="city" type="xs:string"/>
 <xs:element name="county" type="xs:string"/>
 <xs:element name="postcode" type="postcode"/>
 <xs:element name="telephone" type="telephone"/>
 <xs:element name="mobile" type="mobile"/>
 <xs:element name="email" type="xs:string"/>
 <xs:element name="account">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="username"/>
    <xs:element ref="password"/>
    <xs:element ref="userlevel"/>
    <xs:element ref="signupdate"/> 
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="username" type="xs:string"/>
 <xs:element name="password" type="password"/>
 <xs:element name="userlevel" type="userlevel"/>
 <xs:element name="signupdate" type="xs:dateTime"/>

 <xs:element name="festival">
   <xs:complexType>
  <xs:attribute name="id" type="xs:integer" user="optional"/>
   <xs:sequence>
    <xs:element ref="event"/>
    <xs:element ref="contact"/> 
  </xs:sequence>
   </xs:complexType>
 </xs:element>

 <xs:element name="event">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="eventname"/> 
    <xs:element ref="url"/>
    <xs:element ref="datefrom"/>
    <xs:element ref="dateto"/>
    <xs:element ref="location"/>
    <xs:element ref="eventpostcode"/>
    <xs:element ref="coords"/> 
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="eventname" type="xs:string"/>
 <xs:element name="url" type="xs:string"/>
 <xs:element name="datefrom" type="xs:date"/>
 <xs:element name="dateto" type="xs:date"/>
 <xs:element name="location" type="xs:string"/>
 <xs:element name="eventpostcode" type="postcode"/>
 <xs:element name="coords">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="lat"/>
    <xs:element ref="lng"/> 
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="lat" type="xs:decimal"/>
 <xs:element name="lng" type="xs:decimal"/>
 <xs:element name="contact">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="conname"/>
    <xs:element ref="conaddress1"/>
    <xs:element ref="conaddress2"/>
    <xs:element ref="concity"/> 
    <xs:element ref="concounty"/>
    <xs:element ref="conpostcode"/> 
    <xs:element ref="contelephone"/>
    <xs:element ref="conmobile"/> 
    <xs:element ref="fax"/>
    <xs:element ref="conemail"/>  
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="conname" type="xs:string"/>
 <xs:element name="conaddress1" type="xs:string"/>
 <xs:element name="conaddress2" type="xs:string"/>
 <xs:element name="concity" type="xs:string"/>
 <xs:element name="concounty" type="xs:string"/>
 <xs:element name="conpostcode" type="postcode"/>
 <xs:element name="contelephone" type="telephone"/>
 <xs:element name="conmobile" type="mobile"/>
 <xs:element name="fax" type="telephone"/>
 <xs:element name="conemail" type="xs:string"/>
</xs:schema>

最佳答案

这是一个有效的架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="postcode">
        <xs:restriction base="xs:string">
            <xs:minLength value="6"/>
            <xs:maxLength value="8"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="telephone">
        <xs:restriction base="xs:string">
            <xs:minLength value="10"/>
            <xs:maxLength value="13"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="mobile">
        <xs:restriction base="xs:string">
            <xs:minLength value="11"/>
            <xs:maxLength value="11"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="password">
        <xs:restriction base="xs:string">
            <xs:minLength value="32"/>
            <xs:maxLength value="32"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="userlevel">
        <xs:restriction base="xs:integer">
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="county">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Bedfordshire"/>
            <xs:enumeration value="Berkshire"/>
            <xs:enumeration value="Bristol"/>
            <xs:enumeration value="Buckinghamshire"/>
            <xs:enumeration value="Cambridgeshire"/>
            <xs:enumeration value="Cheshire"/>
            <xs:enumeration value="Cleveland"/>
            <xs:enumeration value="Cornwall"/>
            <xs:enumeration value="Cumberland"/>
            <xs:enumeration value="Derbyshire"/>
            <xs:enumeration value="Devon"/>
            <xs:enumeration value="Dorset"/>
            <xs:enumeration value="Durham"/>
            <xs:enumeration value="East Ridings Of Yorkshire"/>
            <xs:enumeration value="Essex"/>
            <xs:enumeration value="Gloucestershire"/>
            <xs:enumeration value="Hampshire"/>
            <xs:enumeration value="Herefordshire"/>
            <xs:enumeration value="Hertfordshire"/>
            <xs:enumeration value="Huntingdonshire"/>
            <xs:enumeration value="Isle Of Man"/>
            <xs:enumeration value="Kent"/>
            <xs:enumeration value="Lancashire"/>
            <xs:enumeration value="Leicestershire"/>
            <xs:enumeration value="Lincolnshire"/>
            <xs:enumeration value="London"/>
            <xs:enumeration value="Middlesex"/>
            <xs:enumeration value="Norfolk"/>
            <xs:enumeration value="North Yorkshire"/>
            <xs:enumeration value="Northamptonshire"/>
            <xs:enumeration value="Northumberland"/>
            <xs:enumeration value="Nottinghamshire"/>
            <xs:enumeration value="Oxfordshire"/>
            <xs:enumeration value="Rutland"/>
            <xs:enumeration value="Shropshire"/>
            <xs:enumeration value="Somerset"/>
            <xs:enumeration value="South Yorkshire"/>
            <xs:enumeration value="Staffordshire"/>
            <xs:enumeration value="Suffolk"/>
            <xs:enumeration value="Surrey"/>
            <xs:enumeration value="Sussex"/>
            <xs:enumeration value="Tyne and Wear"/>
            <xs:enumeration value="Warwickshire"/>
            <xs:enumeration value="West Yorkshire"/>
            <xs:enumeration value="Westmorland"/>
            <xs:enumeration value="Wiltshire"/>
            <xs:enumeration value="Wirral"/>
            <xs:enumeration value="Worcestershire"/>
            <xs:enumeration value="Yorkshire"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="folktask">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="member"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="member">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="user" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="festival" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="user">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="personal"/>
                <xs:element ref="account"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="personal">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="name"/>
                <xs:element ref="sex"/>
                <xs:element ref="address1"/>
                <xs:element ref="address2"/>
                <xs:element ref="city"/>
                <xs:element ref="county"/>
                <xs:element ref="postcode"/>
                <xs:element ref="telephone"/>
                <xs:element ref="mobile"/>
                <xs:element ref="email"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="sex" type="xs:string"/>
    <xs:element name="address1" type="xs:string"/>
    <xs:element name="address2" type="xs:string"/>
    <xs:element name="city" type="xs:string"/>
    <xs:element name="county" type="xs:string"/>
    <xs:element name="postcode" type="postcode"/>
    <xs:element name="telephone" type="telephone"/>
    <xs:element name="mobile" type="mobile"/>
    <xs:element name="email" type="xs:string"/>
    <xs:element name="account">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="username"/>
                <xs:element ref="password"/>
                <xs:element ref="userlevel"/>
                <xs:element ref="signupdate"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="username" type="xs:string"/>
    <xs:element name="password" type="password"/>
    <xs:element name="userlevel" type="userlevel"/>
    <xs:element name="signupdate" type="xs:dateTime"/>
    <xs:element name="festival">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="event"/>
                <xs:element ref="contact"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="event">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="eventname"/>
                <xs:element ref="url"/>
                <xs:element ref="datefrom"/>
                <xs:element ref="dateto"/>
                <xs:element ref="location"/>
                <xs:element ref="eventpostcode"/>
                <xs:element ref="coords"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="eventname" type="xs:string"/>
    <xs:element name="url" type="xs:string"/>
    <xs:element name="datefrom" type="xs:date"/>
    <xs:element name="dateto" type="xs:date"/>
    <xs:element name="location" type="xs:string"/>
    <xs:element name="eventpostcode" type="postcode"/>
    <xs:element name="coords">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="lat"/>
                <xs:element ref="lng"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="lat" type="xs:decimal"/>
    <xs:element name="lng" type="xs:decimal"/>
    <xs:element name="contact">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="conname"/>
                <xs:element ref="conaddress1"/>
                <xs:element ref="conaddress2"/>
                <xs:element ref="concity"/>
                <xs:element ref="concounty"/>
                <xs:element ref="conpostcode"/>
                <xs:element ref="contelephone"/>
                <xs:element ref="conmobile"/>
                <xs:element ref="fax"/>
                <xs:element ref="conemail"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="conname" type="xs:string"/>
    <xs:element name="conaddress1" type="xs:string"/>
    <xs:element name="conaddress2" type="xs:string"/>
    <xs:element name="concity" type="xs:string"/>
    <xs:element name="concounty" type="xs:string"/>
    <xs:element name="conpostcode" type="postcode"/>
    <xs:element name="contelephone" type="telephone"/>
    <xs:element name="conmobile" type="mobile"/>
    <xs:element name="fax" type="telephone"/>
    <xs:element name="conemail" type="xs:string"/>
</xs:schema>

解释:

<sequence>标签放错地方了

您还有一个拼写错误,您写了 user 而不是用作 <attribute> 的属性标签

关于xml - 验证具有空属性的 XML 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629041/

有关xml - 验证具有空属性的 XML 模式的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  6. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  7. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  8. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  9. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  10. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

随机推荐