小编Vin*_*ent的帖子

用Nokogiri解析简单的XML

我有以下XML:

<links>

  <item>
    <title>Title 1</title>
    <url>http://www.example.com/url-1</url>
  </item>

  <item>
   <title>Title 2</title>
   <url>http://www.example.com/url-2</url>
  </item>

  <item>
    <title>Title 3</title>
    <url>http://www.example.com/url-3</url>
  </item>

</links>
Run Code Online (Sandbox Code Playgroud)

而且,我想将其转换为HTML列表:

<ul>
  <li><a href="http://www.example.com/url-1">Title 1</a></li>
  <li><a href="http://www.example.com/url-2">Title 2</a></li>
  <li><a href="http://www.example.com/url-3">Title 3</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

目前我有这个:

控制器:

require 'nokogiri'
doc = Nokogiri::XML(...)

@links = doc.xpath('//links/item').map do |i|
  {'title' => i.xpath('//title'), 'url' => i.xpath('//url')}
end
Run Code Online (Sandbox Code Playgroud)

模板:

<ul>
  <% @links.each do |l| %>
    <li><a href="<%= l['url'] %>"><%= l['title'] %></a></li>
  <% end %>
</ul> 
Run Code Online (Sandbox Code Playgroud)

产生的HTML:

<ul>
  <li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title 1Title 2Title 3</a></li>
  <li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title 1Title 2Title 3</a></li>
  <li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title …
Run Code Online (Sandbox Code Playgroud)

ruby xml xpath ruby-on-rails nokogiri

17
推荐指数
2
解决办法
1万
查看次数

调用超级超级方法

有可能super.super在overriden方法中做一些事情吗?也就是说,绕过直接父母的超级并称为"祖父母"超级?

ruby

15
推荐指数
1
解决办法
4557
查看次数

Magento - 仅加载可配置产品

我有以下代码:

$_productCollection = $this->getLoadedProductCollection();

foreach ($_productCollection as $_product)
{
  if ($_product->_data['type_id'] == 'configurable')
  {
    ...
  } 
}
Run Code Online (Sandbox Code Playgroud)

虽然它做了它应该做的事情,但它大大减慢了页面加载时间.是否可以仅加载可配置产品并删除"可配置"检查?该商店有12000种产品,约700种可配置,其余为儿童简单产品.

我找到了以下代码,它返回所有可配置的产品.我只需要当前类别中的产品:

$collectionConfigurable = Mage::getResourceModel('catalog/product_collection')
                ->addAttributeToFilter('type_id', array('eq' => 'configurable'));
Run Code Online (Sandbox Code Playgroud)

php magento

13
推荐指数
2
解决办法
5万
查看次数

搜索中的INT与VARCHAR

以下哪个查询会更快,更优化(以及为什么):

  1. SELECT * FROM items WHERE w = 320 AND h = 200 (w和h是INT)

  2. SELECT * FROM items WHERE dimensions = '320x200'(尺寸为VARCHAR)

mysql sql database search database-design

11
推荐指数
1
解决办法
4193
查看次数

Ruby/Rails - 如何将秒转换为时间?

我需要执行以下转换:

0     -> 12.00AM
1800  -> 12.30AM
3600  -> 01.00AM
...
82800 -> 11.00PM
84600 -> 11.30PM
Run Code Online (Sandbox Code Playgroud)

我想出了这个:

(0..84600).step(1800){|n| puts "#{n.to_s} #{Time.at(n).strftime("%I:%M%p")}"}
Run Code Online (Sandbox Code Playgroud)

这给了我错误的时间,因为Time.at(n)期望n是epoch的秒数:

0     -> 07:00PM
1800  -> 07:30PM
3600  -> 08:00PM
...
82800 -> 06:00PM
84600 -> 06:30PM
Run Code Online (Sandbox Code Playgroud)

什么是这种转型的最佳时区独立解决方案?

ruby time timestamp ruby-on-rails seconds

10
推荐指数
1
解决办法
2万
查看次数

密码保护在Nginx和Phusion Passenger上运行的Rails站点

我想用基本的http身份验证保护我新部署的Rails 3应用程序.它运行在最新的Nginx/Passenger上,我使用以下Nginx指令来保护Web根目录:

location = / {
  auth_basic "Restricted";
  auth_basic_user_file htpasswd;
}  
Run Code Online (Sandbox Code Playgroud)

htpasswd文件是使用Apache htpasswd utililty生成的.但是,输入正确的用户名和密码后,我将转移到403 Forbidden错误页面.分析Nginx错误日志显示:

directory index of "/var/www/mysite/public/" is forbidden, client: 108.14.212.10, server: mysite.com, request: "GET / HTTP/1.1", host: "mysite.com"
Run Code Online (Sandbox Code Playgroud)

显然,我不想列出mysite/public目录的内容.如何正确配置以便在输入登录信息后启动Rails应用程序?

deployment ruby-on-rails passenger nginx password-protection

10
推荐指数
2
解决办法
4935
查看次数

在Ruby中执行XSL转换的最佳方法(XSLT 2.0)

在Ruby中执行XSL转换的最佳和最有效的方法是什么?我尝试了Nokogiri,但无论我尝试了什么,它总会导致:

compilation error: element stylesheet
Run Code Online (Sandbox Code Playgroud)

样式表在我的XML编辑器中完美运行.

我在Linux上使用Ruby 1.9.3.


在探索之后,我发现Nokogiri不支持XSLT 2.0:

Nokogiri使用libxml2,它只支持XPath 1.0/XSLT1.0

我的样式表是使用XSLT 2.0语法编写的.我更新了这个问题的标题以反映这一点.我希望Nokogiri以更有意义的方式回应它.

为什么要执行XSL转换?只是好奇.

我正在开发一个向其他网站提交XML Feed的网站.每个Feed都有不同的格式,但Feed的数据来源是相同的.因此,我决定使用从数据库提供的XSL样式表,而不是为每个Feed编写自定义代码.这样我就可以通过上传新的样式表来创建新的Feed.

ruby xml xslt nokogiri

7
推荐指数
1
解决办法
2326
查看次数

如何使用Ruby gpgme解密PGP加密文件

我找不到一个如何做到这一点的例子.我有一个PGP加密的XLS文件和一个PGP密钥.这是我的代码返回一个空字符串:

require 'rubygems'
require 'gpgme'

def passfunc(obj, uid_hint, passphrase_info, prev_was_bad, fd)
  io = IO.for_fd(fd, 'w')
  io.puts "PASSPHRASE"
  io.flush
end

encrypted_data = GPGME::Data.new(File.open("file.xls.pgp"))
key = GPGME::Data.new(File.open("key.txt"))

ctx = GPGME::Ctx.new :passphrase_callback => method(:passfunc)
ctx.import_keys key

decrypted = ctx.decrypt encrypted_data

puts decrypted.read
Run Code Online (Sandbox Code Playgroud)

我可以使用相同的密钥在Windows上的一个名为GNU Privacy Assistant的程序中解密此文件.任何帮助表示赞赏.

ruby encryption gnupg pgp gpgme

7
推荐指数
1
解决办法
2973
查看次数

检查字符串变量是否在一组字符串中

哪一个更好:

x == 'abc' || x == 'def' || x == 'ghi'
%w(abc def ghi).include? x
x =~ /abc|def|ghi/
Run Code Online (Sandbox Code Playgroud)

ruby

6
推荐指数
1
解决办法
3023
查看次数

Rails 3:验证中的自定义错误消息

我不明白为什么以下不适用于Rails 3.我得到"未定义的局部变量或方法`custom_message'"错误.

validates :to_email, :email_format => { :message => custom_message }

def custom_message
  self.to_name + "'s email is not valid"
end
Run Code Online (Sandbox Code Playgroud)

我也尝试使用:message =>:custom_message,而不是像rails-validation-message-error帖子中建议的那样 没有运气.

:email_format是位于lib文件夹中的自定义验证器:

class EmailFormatValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      object.errors[attribute] << (options[:message] || 'is not valid')
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

forms validation activemodel ruby-on-rails-3

5
推荐指数
1
解决办法
4435
查看次数