我正在抓的内容包括一些空白元素.如果没有数据(最好),我需要停止设置变量,或者之后只做一些手术并完全删除包含空格的哈希.
这是我的刮擦代码:
eqs = []
nokogiri_page.xpath('//table/tr').each do |row|
date = row.xpath('td[1]/a/text()').text.strip
location = row.xpath('td[5]/text()').text.strip
eqs.push(
date: date,
location: location
)
end
Run Code Online (Sandbox Code Playgroud)
其中一些是空白的,我事先无法知道.所以我尝试迭代数组并删除空白值:
eqs.each do |event|
event.reject! {|k, v| v.empty? || v==" " || v=="" }
end
Run Code Online (Sandbox Code Playgroud)
这成功删除了空白键和值,但我仍然留下空的花括号......
输出:
[
{},
{},
{},
{
:date=>"2016-12-14 13:19:55",
:location=>"Myanmar"
},
{
:date=>"2016-12-13 17:57:04",
:location=>"Northern Sumatra, Indonesia"
}
]
Run Code Online (Sandbox Code Playgroud)
我想完全摆脱空洞的哈希!谁知道我在这里弄错了什么?
我有
def destroy
Event.find(params[:id]).destroy
flash[:info] = "Event deleted"
redirect_to :back
end
Run Code Online (Sandbox Code Playgroud)
我可以从2个不同的视图中删除一个项目.在一个视图中,它是一个项目列表,因此我可以使用:back并重新加载同一页面.但另一个删除是在要删除的项目的视图上,所以一旦它消失了我想要的redirect_to地方不同.
我的问题是如何redirect_to根据destroy方法的来源告诉Rails不同的路径?
就像测试一样,我尝试使用基于html中的body类的if语句,但是实例变量没有被带入destroy方法(我假设),因为它不起作用.例如
def destroy
if @body_class == 'one page'
Event.find(params[:id]).destroy
flash[:info] = "Event deleted"
redirect_to :back
elsif @body_class == 'a different page'
Event.find(params[:id]).destroy
flash[:info] = "Event deleted"
redirect_to root_path
end
end
Run Code Online (Sandbox Code Playgroud)