2013-04-07 27 views
0

我们正在尝试使用sendstrftime('%Y/%m/%d')在我们的轨道约会对象3.2.12应用。下面是测试我们rails console做:如何在轨3.2.12发送(“的strftime( '%Y /%M /%d')”)?

irb(main):014:0> b=User.offset(1).first 
    ←[1m←[35mUser Load (1.0ms)←[0m SELECT "users".* FROM "users" LIMIT 1 OFFSET 1 
=> #<User id: 2, login: "wsxl207", name: "?????", email: nil, encrypted_password: "55a48ac66ba164805d91dc5415455cd402e9c8b3a656620136a...", salt: "3ee 
e529200bdcad3ed2f16a8749ede6f046130e2705714ab55d...", status: "active", user_type: "employee", input_by_id: 1, created_at: "2012-04-13 16:23:25", upda 
ted_at: "2012-08-22 03:15:12"> 

irb(main):015:0> b.send('created_at').send("strftime('%Y/%m/%d')") 
NoMethodError: undefined method `strftime('%Y/%m/%d')' for 2012-04-13 16:23:25 UTC:Time 
     from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/time_with_zone.rb:332:in `method_missing' 
     from (irb):15 
     from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.12/lib/rails/commands/console.rb:47:in `start' 
     from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.12/lib/rails/commands/console.rb:8:in `start' 
     from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.12/lib/rails/commands.rb:41:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

irb(main):016:0> b.send('created_at').strftime('%Y/%m/%d') 
=> "2012/04/13" 

然而,我们发现,sendstrftime('%Y/%m/%d')send("strftime('%Y/%m/%d')")工作。我们在这里错过了什么?谢谢您的帮助。

+1

什么是你想用'send'办?因为这不是你如何使用它。 – Linuxios 2013-04-07 00:51:32

回答

2

send采取的方法的名称(最好为标志,虽然串的作品,太)作为其第一个参数,和参数的方法调用为剩余的参数。所以,我想你要找的是什么:

b.send(:created_at).send(:strftime, "%Y/%m/%d") 

也就是说,如果你在代码中明确地这样做,你几乎可以肯定要只是调用created_atstrftime直接,而不是使用元编程方法send

+0

它的工作原理。谢谢。我们必须使用元编程。 – user938363 2013-04-07 00:58:47

+0

@ user938363:您不需要为此编程。您可以用'.strftime(“%Y /%m /%d”)''将此调用替换为'send'。 '发送'是毫无意义和过度复杂的。 – Linuxios 2013-04-07 01:07:35

相关问题