我已经看到了几件事,但到目前为止似乎没有任何工作.我在rails 3 ruby 1.9.2上使用nokogiri通过url解析xml.
xml的片段如下所示:
<NewsLineText>
<![CDATA[
Anna Kendrick is ''obsessed'' with 'Game of Thrones' and loves to cook, particularly creme brulee.
]]>
</NewsLineText>
Run Code Online (Sandbox Code Playgroud)
我试图解析这个以获取与NewsLineText相关联的文本
r = node.at_xpath('.//newslinetext') if node.at_xpath('.//newslinetext')
s = node.at_xpath('.//newslinetext').text if node.at_xpath('.//newslinetext')
t = node.at_xpath('.//newslinetext').content if node.at_xpath('.//newslinetext')
puts r
puts s ? if s.blank? 'NOTHING' : s
puts t ? if t.blank? 'NOTHING' : t
Run Code Online (Sandbox Code Playgroud)
我得到的回报是
<newslinetext></newslinetext>
NOTHING
NOTHING
Run Code Online (Sandbox Code Playgroud)
所以我知道我的标签被正确命名/拼写以获取newslinetext数据,但cdata文本永远不会出现.
我需要用nokogiri来获取此文本?
我有一些我希望在json响应中显示的文章.我还想导出一个关于所请求的json请求类型的节点.
collection @articles => :headlines
extends 'articles/show'
Run Code Online (Sandbox Code Playgroud)
object @article
attributes :foo
Run Code Online (Sandbox Code Playgroud)
所以去articles.json给了我:
{"headlines":[{"foo":thing1},{"foo":thing2}]}
Run Code Online (Sandbox Code Playgroud)
我想做的是得到这样的结果:
{"rss":{"name":"articles","woot":"what?"},
{"headlines":[{"foo":thing1},{"foo":thing2}]}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将node(:rss){"yadda yadda"}放在index.json.rabl文件中,但是只将节点:rss添加到每篇文章中.
我试过用
glue @article do
node(:rss) { "yadda yadda" }
end
Run Code Online (Sandbox Code Playgroud)
在索引和显示文件中都没有像我希望的那样工作.
我尝试了很多其他的东西,但此时我只是猜测.
我正在尝试创建一个名为:current_season的命名范围,它将正确识别与我们所在年份相关的记录.除了我希望6月及以后的所有内容使用当前年份以及6月之前的所有内容时,我非常容易使用去年.
在rails 3.1我可以轻松使用:
scope :current_season, lambda { where('season = ?',Time.now.year) } if Time.now.month >= 6
Run Code Online (Sandbox Code Playgroud)
如果我们在年底时才能使范围有效:
scope :current_season, lambda { where('season = ?',Time.now.year - 1) } if Time.now.month < 6
Run Code Online (Sandbox Code Playgroud)
但是,将它全部命名为两次并且不使用if/else类型的东西或者能够调用我在下面定义的内容以显示确切的年份似乎是浪费的,例如:
scope :current_season, lambda { where('season = ?',:current_season_year) }
def current_season_year
if Time.now.month >= 6
Time.now.year
else
Time.now.year - 1
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试时,这只是嘲笑我.有更干净的方式吗?我也有一个范围:last_season和范围:previous_season最有可能,他们将遵循类似的逻辑.
提前感谢任何建议!
我正在尝试使用rabl从rake任务创建一个json文件.下面我有要测试的简化版本.
当我通过url查看'articles.json'或'articles/2.json'时,我得到了预期的json响应.
但是当我尝试通过rake任务运行它时,它在创建的jsonFile中的@articles总是有一个空值.它将使index.json.rabl视图呈现与@ articles.count相同的次数,但值始终为null.
那么如何将我的rake任务中创建的@articles对象传递给Rabl.render?
@feedName ||= 'default'
node(:rss) { partial('articles/rss), :object => @feedName }
node(:headlines) { partial('articles/show'), :object => @articles }
Run Code Online (Sandbox Code Playgroud)
object @article
attributes :id,:body
....
Run Code Online (Sandbox Code Playgroud)
task :breakingnews => :config do
filename = 'breakingnews.json'
jsonFile = File.new(filename)
@articles = Article.limit(10)
n = Rabl::renderer.json(@articles,'articles/index',view_paths => 'app/views')
jsonFile.puts b
jsonFile.close
Run Code Online (Sandbox Code Playgroud)