得到一个奇怪的错误,我无法弄清楚为什么会这样。
这是控制器的相关部分:
def viewblg (num = 0, type = 0)
if type == 1
@blg = Compsci.find_by (num)
else
@blg = Personalb.find_by(num)
end
end
以下是失败的视图:
<h3><b><u>
<%=
if @blg.title != nil
@blg.title
else
"Error"
end
%>
</u></b></h3>
我得到的确切错误是:
undefined method `title' for nil:NilClass
编辑:这是一个视图页面,我通过link_to传递变量:
<ul>
<% @compsci.each do |blog| %>
<li><%= link_to "#{blog.title}", viewblog_path(blog.number, 1) %></li>
<% end %>
</ul>
此外,这是我对link_to
的路径路径get 'pblog' =>'blog#personal'
答案 0 :(得分:2)
此错误表示@blg
为nil
。此外,.find_by
似乎错了。不应该只是.find
吗?
如果您没有尝试通过ID找到,则应该.find_by_number(num)
。甚至:.find_by(number: num)
修复后,您可以在视图中执行此操作:
<% if @blg.title.present? %>
<%= @blg.title %>
<% else %>
Error
<% end %>
答案 1 :(得分:0)
其中一行Compsci.find_by (num)
或Personalb.find_by(num)
返回零。也许你应该只使用find(num)
。
答案 2 :(得分:0)
@blg
为零,导致@blg.title
在.title
上呼叫nil
。确保将正确的参数传递给find_by
- 您的默认值为0
,这将返回nil
。
答案 3 :(得分:0)
要阻止视图中的undefined method 'xxxxx' for nil:NilClass
,您需要在调用其属性之前验证@blg是否为nil
<% if @blg.present? %>
<%= @blg.title %>
<% else %>
Error
<% end %>
这是find_by
Client.find_by first_name: 'Lifo'
http://guides.rubyonrails.org/active_record_querying.html#find-by
你的行动可能看起来像这样
def viewblg (num = 0, type = 0)
if type == 1
@blg = Compsci.find_by(nubmer: num)
else
@blg = Personalb.find_by(number: num)
end
end