小编mat*_*ski的帖子

Ruby:删除哈希数组中的空括号

我正在抓的内容包括一些空白元素.如果没有数据(最好),我需要停止设置变量,或者之后只做一些手术并完全删除包含空格的哈希.

这是我的刮擦代码:

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)

我想完全摆脱空洞的哈希!谁知道我在这里弄错了什么?

ruby arrays hash nokogiri

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

Rails在破坏后重定向

我有

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)

ruby-on-rails destroy

3
推荐指数
1
解决办法
5876
查看次数

标签 统计

arrays ×1

destroy ×1

hash ×1

nokogiri ×1

ruby ×1

ruby-on-rails ×1