设置属性未定义的方法

时间:2014-12-03 19:16:54

标签: ruby-on-rails ruby ruby-on-rails-4

这是一个例子:

<%= atributo = "name" %>
<% @clients.each do |cli| %>
  <%= cli.atributo %>
<% end %>

错误未定义方法'atributo'

6 个答案:

答案 0 :(得分:4)

这不是Ruby的工作方式。例如:

attribute = "name"

client = Client.first
client.attribute # => Calls "attribute" method on client

您想要的是动态调用方法:

attribute = "name"

client = Client.first
client.send(attribute) # => Calls "name" method on client.

更好的是只读取您想要操作的属性:

attribute = "name"

client = Client.first
client[attribute] # => Value of "name" attribute

答案 1 :(得分:1)

你想要的可能是:

<% atributo = "name" %>
<% @clients.each do |cli| %>
   <%= clo[atributo] %>
<% end %>

因此,您可以动态调用#name上的方法cli

答案 2 :(得分:0)

您正在调用atributo对象上的方法cli。如果该对象没有该方法,那么您将收到错误。

你在这里做的是将一个局部变量设置为字符串&#34; name&#34;然后迭代一些集合并在对象上调用一些方法。我不认为你打算做什么。我需要更多信息指出你正确的方向。

答案 3 :(得分:0)

当您定义atributo时,它会变成一个独立变量,与任何模型无关。

当您呼叫cli.atributo时,您正在尝试查找与atributo对象关联的cli方法,该方法不存在。如果您需要从对象访问atributo,请在模型中定义它。

答案 4 :(得分:0)

<%= atributo = "name" %> 

实际上是试图将其打印出来,唯一可以打印出来的方法是如果有方法atributo

尝试

<% atributo = "name" %>

或者更好的是,在控制器中设置attributo的值(如在@attributo中)。该视图应仅用于查看,而不是实际设置变量。

答案 5 :(得分:0)

我认为这可能是你想要的:

<% @clients.each do |cli| %>
    <%= cli.name %>
<% end %>