将模型中的方法显示到视图中(rails)

时间:2015-10-21 18:14:16

标签: ruby-on-rails

我在轨道应用程序上有这个信息,我希望显示,但我想稍微操纵它并用它来改变它。信息存储在数据库中。现在我正在查看我的show.html.haml页面并创建一个包含此信息的表。

在数据库中,它存储为

{
"images" => true,
"age" => true,
"position" => true
}

我也可以通过输入

在控制台中进行调整
player.last.information

所以考虑到这一点,在我的haml文件中我有

%dd @player.information

我得到了我需要的所有信息。但是,我想把它们分开一点。对此进行了一些研究here我能够逐行分解控制台中的信息。但是我将它们从终端转移到代码中。

我试图在我的模型中开始非常简单

def information
  @player.information
end

然后在我的show.html.haml文件中假设它就像这一样简单,没有任何运气。如果有的话这是我的问题。我怎样才能获得在我的模型中创建的方法出现在我的视图中?

%dd :information

我没有触及控制器中的任何东西。我不认为我需要做任何事情,(虽然肯定是错的)是否有人能够为我快速看一下这个?

非常感谢。

1 个答案:

答案 0 :(得分:0)

首先,你有这段代码

def information
  @player.information
end

将抛出一个堆栈错误(实际上,它可能会在它自己的实例方法中使用 内部的@player实例中断,然后才会出现堆栈错误。如果您绝对必须覆盖information,例如,如果information是一个字符串,并且您要求它始终是低级的,那么您可以像这样定义方法:< / p>

def information
  read_attribute(:information).downcase
end

然而,这通常是不鼓励的。您可以更好地保留属性,以便在需要时始终获取属性的原始内容,并且如果您想要某种特定的属性格式,则可以使用补充方法。

例如,如果您需要突破information属性,可能将所有键格式化为句子,那么最好是这样的:

def formatted_information
  self.information.keys.to_sentence.titleize
end

会给你以下输出:

"Images, Age, And Position"

执行@player.formatted_information

当然,我并不熟悉你想要对那个哈希做什么样的格式化,但天空是极限,所以发疯了。

附带问题

另外,我很想知道你为什么要在information属性中存储值的哈希值,而不仅仅是让该属性中的每个键都是它自己的属性 - 即{{1 },@player.images@player.age