控制器中没有方法错误

时间:2015-04-19 23:17:47

标签: ruby-on-rails ruby

得到一个奇怪的错误,我无法弄清楚为什么会这样。

这是控制器的相关部分:

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'

4 个答案:

答案 0 :(得分:2)

此错误表示@blgnil。此外,.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