我的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约定,而不是别的地方?因为在同一个文件中我还有另一个算法,它读取模型的所有属性,将其放入一个数组中,并只显示唯一值。
谢谢
答案 0 :(得分:2)
你应该写:
<% @server.update_attribute(:serverStatus, 'Up') %>
是的:您不应该在视图中更新模型。在你的情况下,它可以干净地生活在before_save
中,或者为什么不在模型中的after_initialize
回调中。
最后:在Ruby中,惯例是蛇案,所以server_status
代替serverStatus