我有以下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) 我有以下代码:
$_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) 以下哪个查询会更快,更优化(以及为什么):
SELECT * FROM items WHERE w = 320 AND h = 200 (w和h是INT)
SELECT * FROM items WHERE dimensions = '320x200'(尺寸为VARCHAR)
我需要执行以下转换:
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)
什么是这种转型的最佳时区独立解决方案?
我想用基本的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
在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.
我找不到一个如何做到这一点的例子.我有一个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的程序中解密此文件.任何帮助表示赞赏.
哪一个更好:
x == 'abc' || x == 'def' || x == 'ghi'
%w(abc def ghi).include? x
x =~ /abc|def|ghi/
Run Code Online (Sandbox Code Playgroud)
?
我不明白为什么以下不适用于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)