隐式转换字符串为整数

时间:2016-05-27 03:37:40

标签: ruby-on-rails

我有以下方法,我收到错误

  

“没有将String隐式转换为整数”

在线

if (!thisitem['value'].to_i.match(/[\/-].{2}/).nil?)

一点背景:我是这个项目的新手,这是一个内部CMS。我试图从Rails 2升级到Rails 4.我来自ASP.NET背景。

  

参数:参数:{“utf8”=>“✓”,   “authenticity_token”=> “中ahD3oriEXY895BNx53nd03Q6PQZ1yOQkgkpCGM4OlVqXODjrl3EIb6Uqa9mqVwwWgCQhV5qxRebCmEyoP57HzQ ==”,   “info_items”=> {“1”=> {“id”=>“1”,“description”=>“结算率”,   “value”=>“110”},“2”=> {“id”=>“2”,“description”=>“旅行费率”,   “value”=>“55”}},“commit”=>“更新”}

  def update_info
    @updated_items=params[:info_items]
    @updated_items.each do |thisitem|
      @item=TrackInformation.find_by_id(thisitem)
      if (!thisitem['value'].match(/[\/-].{2}/).nil?)
        thisdate=thisitem['value']
        if !thisdate.match(/\/.{2}/).nil?
          newdate=Date.strptime(thisdate,"%m/%d/%Y")
        else
          newdate=Date.strptime(thisdate,"%m-%d-%Y")
        end
        thisdate=newdate
        thisitem['value']=thisdate
      end
      @item.update_attributes(thisitem)
      @item.changed_by=User.find(session[:user]).id
      @item.save
    end

  end

修改

所以阅读@Anand我意识到日期不应该等于值,因为值是一个美元金额,所以我将方法修改为:

  def update_info
    i = 1
    @updated_items=params[:info_items]
    @updated_items.each do |this_item|
      @item=TrackInformation.find_by_id(this_item[i][:id])
      @item.description = this_item[i][:description]
      @item.value = this_item[i][:value]
      @item.changed_by=session[:user].to_i
      @item.save
      i = i + 1
    end
    redirect_to :controller => 'admin', :action => 'list'
  end

现在我明白了:

  

未定义的方法`[]'为nil:NilClass

编辑2:

  def update_info
    byebug
    @updated_items=params[:info_items]
    @updated_items.each do |id, description, value|
      @item=TrackInformation.find_by_id(id)
      @item.value = value
      @item.description = description
      @item.changed_by=session[:user]
      @item.save
    end
    redirect_to :controller => 'admin', :action => 'list'
  end

这似乎有效但是把它放在数据库中: enter image description here

编辑3:

  def update_info
    @updated_items=params[:info_items]
    @updated_items.each do |this_item_key,this_item_value|
      @item=TrackInformation.find_by_id(this_item_key)

      @item.update_attribute(this_item_key, this_item_value)
      @item.changed_by=session[:user]
      @item.save
    end
    redirect_to :action => 'list'
  end

enter image description here

1 个答案:

答案 0 :(得分:1)

根据你的参数,每个thisitem都是一个哈希 - 你可以获得密钥和值作为块参数,并适当地使用它们。此外,if !(something).nil?可以简化为if something.present?。最后,使用下划线命名变量是个好主意 - this_item而不是thisitem

更新:由于问题已更改,因此也更新了以下代码

def update_info
    @updated_items=params[:info_items]
    @updated_items.each do |this_item_key,this_item_value|
      @item=TrackInformation.find_by_id(this_item_key)

      @item.value = this_item_value['value']
      @item.description = this_item_value['description']
      @item.changed_by=session[:user]
      @item.save
    end

  end