Ruby 带块的Hash.new返回空哈希

Ruby 带块的Hash.new返回空哈希,ruby,hash,Ruby,Hash,为什么这个散列返回为空?它位于我的文档模型中: def li_hash li_hash = Hash.new do |share| share.comment "#{self.remove_html(self.components.first.body[0..300])}..." share.content do |c| c.title "#{self.title}" c.description "Read this" c.tag! "su

为什么这个散列返回为空?它位于我的文档模型中:

def li_hash
  li_hash = Hash.new do |share|
    share.comment "#{self.remove_html(self.components.first.body[0..300])}..."
    share.content do |c|
      c.title "#{self.title}"
      c.description "Read this"
      c.tag! "submitted-url", "#{root_url.gsub(/\/$/, '')}#{share_path(self.user.ftp, self)}"
      c.tag! "submitted-image-url", "#{root_url.gsub(/\/$/, '')}#{self.component.image_newsletter.path}"
    end
    share.visibility.code "anyone"
  end
end
我是这样从控制台调用它的:

d = Document.find(328)
d.li_hash
它只是返回:

=> {} 

该记录是有效的,并且全部有效。有什么想法吗?我正在尝试将此哈希提交给LinkedIn,但它显然无法正常工作。

哈希。new
始终返回空哈希。指定的块仅用于在使用哈希中不存在的密钥访问哈希时提供默认值,per表示:

如果指定了块,则将使用哈希对象和 键,并应返回默认值。这是街区的 如果需要,负责将值存储在哈希中


在更新哈希之前,哈希中不会有任何内容。

此代码中实际上没有设置任何内容。另外,我认为您可能误解了将块传递给哈希的作用。当您将一个块传递给散列时,您可以做的是设置一个lambda,该lambda将在散列的每个后续加法中执行

作为缔约国:

如果指定了块,则将使用哈希对象和键调用该块,并应返回默认值。如果需要,块负责将值存储在散列中

如果您正试图以确定的方式在散列中设置一组参数,则应明确声明散列,如下所示:

{
  :comment => "#{self.remove_html(self.components.first.body[0..300])}...",
  :content => {
    :title => "#{self.title}",
    :description => "Read this",
  }
}

然后,如果您有任何副作用(如
标记!
方法),请分别这样做。

共享.visibility.code“任何人”做什么?它似乎返回了
nil
…它将一个字符串设置为
any
。它不是一个变量或任何东西。我重写了这个方法,但它只会给我抛出一堆
期望关键字\u end
错误。将更新问题。谢谢!等等:逗号?仅在顶层?啊,得到了格式<代码>根url显然在模型中不起作用,但是是的。