小编Jwa*_*622的帖子

替换Ruby中的to_s方法.不打印出所需的字符串

所以,我刚刚开始学习Ruby,我在我的类中包含了一个to_s方法,这样我就可以简单地将Object传递给puts方法,让它返回的不仅仅是Object ID.我犯了一个错误并将其定义为:

def to_s
    puts "I'm #{@name} with a health of #{@health}."
end
Run Code Online (Sandbox Code Playgroud)

代替:

def to_s
    "I'm #{@name} with a health of #{@health}."
end
Run Code Online (Sandbox Code Playgroud)

所以,当我在使用第一个代码块时执行此操作:

player1 = Player.new("larry")
puts player1
Run Code Online (Sandbox Code Playgroud)

当我执行上面两行代码而不仅仅是字符串时,我得到一个对象ID和一个字符串.为什么是这样?我得到这个输出:

I'm Larry with a health of 90.
#<Player:0x007fca1c08b270>
Run Code Online (Sandbox Code Playgroud)

我试图考虑为什么程序的第一个版本不只是打印出字符串到控制台,而是返回对象ID和字符串.我认为当我将对象传递给puts时,所发生的一切就是puts转向并调用to_s方法来获取玩家的字符串表示.对?

ruby class

2
推荐指数
1
解决办法
2060
查看次数

JSON API 问题。包含与关系

我在构建 API 端点之前正在阅读这篇文章。我读到了关于复合文档的引用:

为了减少 HTTP 请求的数量,服务器可以允许包含相关资源以及所请求的主要资源的响应。此类回复称为“复合文档”。

以下是使用 JSON API 规范的 JSON 响应示例:

{
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!"
    },
    "links": {
      "self": "http://example.com/articles/1"
    },
    "relationships": {
      "author": {
        "links": {
          "self": "http://example.com/articles/1/relationships/author",
          "related": "http://example.com/articles/1/author"
        },
        "data": { "type": "people", "id": "9" }
      },
      "comments": {
        "links": {
          "self": "http://example.com/articles/1/relationships/comments",
          "related": "http://example.com/articles/1/comments"
        },
        "data": [
          { "type": "comments", "id": "5" },
          { "type": "comments", "id": "12" }
        ]
      }
    } …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails json-api

2
推荐指数
1
解决办法
2695
查看次数

当在 Rails 中传递带有符号和对象的数组时,link_to 帮助器会扩展为什么?

在 Rails 中(特别是在 ActiveAdmin 中),带有作为第二个参数传递的数组的 link_to 帮助器会做什么?这方面的文档在哪里?

我有这个代码:

index pagination_total: false do column :name, :sortable => :first_name do |user| link_to user.full_name, [:admin, user] end

那有什么作用?[:admin, user] 在这里做什么?

这里一件令人困惑的事情是我的 ActiveAdmin 面板定义为:

ActiveAdmin.register Promotions::User, as: "User" do

因此,链接实际上是在模块前面加上的,如下所示:

admin_promotions_users_path这是我不想要的。这会导致错误,因为它as:会覆盖 ActiveAdmin path_helper。我想要的是:

admin_users_path

简而言之,我认为这里的错误是,link_helper当传递带有符号对象的数组时,我不知道 a 扩展为什么。

ruby-on-rails activeadmin

2
推荐指数
1
解决办法
802
查看次数

使用 splat 匹配路线。它有什么作用?

我看到这条路线:

match "*a", to: 'application#some_error_handler', via: :all

这在 Rails 中起什么作用?这是一个“a”吗?

ruby-on-rails-4

2
推荐指数
1
解决办法
1062
查看次数

在Rails中同时具有db级别和代码级别唯一性验证的目的是什么?

我看到一个在Rails中同时具有db级和代码级验证的表.

CREATE UNIQUE INDEX some_index_name ON joined_table_name USING btree (user_id, restriction_id);
Run Code Online (Sandbox Code Playgroud)

和代码级别:

class SomeJoinTable
validates_uniqueness_of :restriction_id, :scope => :user_id
end
Run Code Online (Sandbox Code Playgroud)

两者兼有的好处是什么?

validation ruby-on-rails unique-index

2
推荐指数
1
解决办法
286
查看次数

JWT令人困惑。应用程序服务器如何进行身份验证?

除了最后一部分,有关JWT的这篇文章非常清晰。

我了解的部分:1.编码与加密有所不同。2.令牌的组成部分(标头base64编码,有效载荷base64编码,签名,标头+有效负载使用公钥和指定的算法加密)

但是我不了解第5部分中如何处理令牌验证。我也不了解为什么报头和有效负载需要进行Base64编码。鉴于它既不安全也不加密...编码的一部分是什么?

***** 编辑 ****

我的理解是否正确,因为JWT包含编码的标头和有效负载...应用服务器可以仅使用其秘密密钥(也许是非对称加密机制中的公共密钥)来加密所包含的有效载荷和标头,以及是否到达包含相同的JWT签名...,那么应用程序服务器知道数据未被篡改,并且用户确实已通过身份验证服务器进行身份验证。这是正确的吗?

如果签名不匹配。这意味着什么?

jwt

2
推荐指数
1
解决办法
454
查看次数

这个自执行匿名函数和这个普通函数调用有什么区别?

这有什么区别:

(function() {
    var Person = {
        sayHello: function() {
            alert('Hello World');
        }
    }

    Person.sayHello();
})();
Run Code Online (Sandbox Code Playgroud)

还有这个:

var Person = {
    sayHello: function() {
        alert('Hello World');
    }
}

Person.sayHello();
Run Code Online (Sandbox Code Playgroud)

除了后者创建一个公共函数,前者是一种创建一种私有函数的方法(你不能在括号外引用Person ...有什么区别?

javascript

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

方法class_name未定义Rails中的Class对象

我有一个问题,其中class_name似乎适用于类似的东西

User.first.class.class_name 在当地,但它似乎在生产中失败.

我试图找出class_name的定义位置(我正在使用它Admin::User.first.name.class_name返回类似的东西,"User"因为我想要去模块化的类名.)为什么它不能用于生产?

我在哪里可以看到class_name属于哪个模块?

ruby-on-rails-4

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

Ruby的&方法表示法.到底是怎么回事?

我遇到&method了代码库,我不知道发生了什么.这发生在irb:

[12,3].map(&method(:to_s))
#=> ArgumentError: wrong number of arguments (given 1, expected 0)
["12","3"].map(&method(:Integer))
#=> [12, 3]
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

我熟悉并且等于to_proc,但我仍然无法在这里连接点.

ruby

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

在这种情况下 instance_eval 是如何工作的?到底是怎么回事?

instance_eval当它通过绑定时会做什么?我对这段代码感到困惑:

require 'erb'
require 'ostruct'
namespace = OpenStruct.new(name: 'Joan', last: 'Maragall')
template = 'Name: <%= name %> <%= last %>'
result = ERB.new(template).result(namespace.instance_eval { binding })
Run Code Online (Sandbox Code Playgroud)

我从文档中读到instance_eval:z

在接收器 (obj) 的上下文中评估包含 Ruby 源代码或给定块的字符串。为了设置上下文,在代码执行时将变量 self 设置为 obj,使代码可以访问 obj 的实例变量。

所以binding在接收者的上下文中运行,即OpenStruct. 但是模板是如何获得name和的last呢?我感觉我少了一步。

也就是说,我很困惑为什么会发生这种情况:

result = ERB.new(template).result(namespace)
TypeError: wrong argument type OpenStruct (expected binding)
Run Code Online (Sandbox Code Playgroud)

ruby

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