【问题标题】:Rails/Ruby: Get Last 4 Digits of Credit CardRails/Ruby:获取信用卡的最后 4 位数字
【发布时间】:2015-12-03 07:09:43
【问题描述】:

我知道我见过一些类似的问题,但没有一个解决方案对我有用。

我正在向我的信用卡控制器发送一个 16 位数字,但我只需要最后四个。我一直在尝试 [-4..-1] 到 [14-16] 到 last(4) 的每个版本,但我仍然遇到同样的错误:数字太多。这是我现在拥有的代码行(:last_4 以 16 位发送到控制器):

credit_card_params[:last_4 => credit_card_params[:last_4].last(4)]

该字段是一个整数字段。这是一个示例输入:

1234567890987654

这应该会产生:

7654

我做错了什么?

更新:

我非常感谢您的所有回复。 u=原来这实际上是一个字符串。无论如何,我一直在为此烦恼。还是不行!这是我的代码,我的控制器仍在抱怨字符太多:

ccNum=credit_card_params[:last_4]
ccNum = ccNum[-4..-1] 
credit_card_params[:last_4 => ccNum]
@credit_card = CreditCard.new(credit_card_params)
respond_to do |format|
  if @credit_card.save #HERE IS THE ERROR!

这是表单中的代码:

<%= f.label :last_4, "Credit Card Number" %><br>
<%= f.number_field :last_4 %>

保持字符串 1234123412341235 不变,并显示以下错误消息:

1234123412341235 超出 ActiveRecord::Type::Integer 的范围,限制为 4

如果有人能解决这个问题,我将不胜感激。

【问题讨论】:

  • 请显示更多代码,例如从哪里发送或从哪里接收?
  • credit_card_params,是数字还是字符串?
  • 提供样本输入、实际输出和预期输出。
  • 你使用我的解决方案了吗?

标签: ruby-on-rails ruby


【解决方案1】:

考虑一下:

cc = 1111222233334444 # 16 digits in int
cc = cc.to_s # as a string now
cc = cc[-4..-1] # as a string "4444"
cc = cc.to_i #now as a int 4444

或者就一行

cc = cc.to_s[-4..-1].to_i

【讨论】:

  • 是的 :) 所以这甚至不需要to_s ;)
  • 我被分配使用的数据库具有 last_4 的整数。我尝试了这段代码,我得到了这个:“语法错误,意外'[',期待'(' ...dit_card_params[:last_4].to_s.[-4..-1].to_i] ... ^ /workspace /eytan/app/controllers/credit_cards_controller.rb:33:语法错误,意外']',期待keyword_end ...d_params[:last_4].to_s.[-4..-1].to_i] ... ^"
  • .to_i 之后不应该有]。仔细再试一次:)
  • @PatNowak 非常感谢您的坚持,遗憾的是仍然没有。请查看更新后的问题了解更多详情。
  • 你有字符串而不是int?哟应该在那里使用to_i。您也可以使用此项目发送指向您的仓库的链接。
【解决方案2】:

试试这个:

last_4 = credit_card_params[:last_4].to_s.last(4)

credit_card_params[:last_4] = last_4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2016-02-02
    • 2012-07-11
    • 2014-09-17
    • 2018-10-18
    • 2022-10-15
    • 2015-08-07
    • 2014-12-01
    相关资源
    最近更新 更多