我的一个模型#show动作中的NoMethodError

时间:2011-08-12 14:35:01

标签: ruby-on-rails ruby ruby-on-rails-3

我的show.html.erb文件中有以下代码:

<p>
 <b>Status:</b>

 <% if @server.serverUp?.to_s == "Up" %>
  <% @server.update_attribute(@server.serverStatus, 'Up') %>
      <span style="color: green;"> <%= @server.serverUp? %></span>
      <% else %>
        <span style="color: #ff0000;"> <%= @server.serverUp? %></span>
      <% end %>
</p>

我主要担心的是<% @server.update_attribute(@server.serverStatus, 'Up') %>行会导致我的应用无法正常工作。该行应该保存服务器的状态,无论是“Up”还是“Down”,并将其保存在“serverStatus”列下的“servers”表中。

但是,当我转到http://localhost:3000/servers/id_of_server,其中'id_of_server'是1-300之间的数字时,会出现以下错误消息:

NoMethodError in Servers#show

Showing C:/SIS/app/views/servers/show.html.erb where line #18 raised:

undefined method `=' for #<Server:0x60b9358>
Extracted source (around line #18):

15: <p>
16:   <b>Status:</b>
17:      <% if @server.serverUp?.to_s == "Up" %>
18:       <% @server.update_attribute(@server.serverStatus, 'Up') %>
19:           <span style="color: green;"> <%= @server.serverUp? %></span>
20:           <% else %>
21:             <span style="color: #ff0000;"> <%= @server.serverUp? %></span>

我似乎不理解错误消息,因为我没有在提供的代码提取中使用等号。任何帮助将不胜感激。

如果你们需要更多信息,请告诉我们。

提前致谢

编辑:当我在这里时,我只是想通过将这种类型的代码放入show.html.erb文件来询问我是否不遵循RoR约定,而不是别的地方?因为在同一个文件中我还有另一个算法,它读取模型的所有属性,将其放入一个数组中,并只显示唯一值。

谢谢

1 个答案:

答案 0 :(得分:2)

你应该写:

<% @server.update_attribute(:serverStatus, 'Up') %>

是的:您不应该在视图中更新模型。在你的情况下,它可以干净地生活在before_save中,或者为什么不在模型中的after_initialize回调中。

最后:在Ruby中,惯例是蛇案,所以server_status代替serverStatus