【问题标题】:NoMethodError in localhost:3000本地主机中的 NoMethodError:3000
【发布时间】:2016-12-15 20:41:21
【问题描述】:

我一直在使用 Rails 服务器预览我对在 gh 上共享给我的网站代码所做的一些 html/css 更改,但我无法访问某些页面,因为我收到此错误:

/media 处的 NoMethodError nil:NilClas 的未定义方法“each”

这是来自用户个人资料中的功能的页面;我在终端中创建了一个假用户,因此我可以访问个人资料页面,但我想要的个人资料页面给出了该错误。

这是代码的一部分:

  <div class="select_wrapper">

      <select name="trienal_id" id="" required>

      <option value="" disabled>Trienal</option>

      **<% Subject.where(discipline_type: 0)[1..3].each do |s| %>**

            <option value="<%= s.id %>" <%= "selected" if @tri_id==s.id %>><%= s.name %></option>

            <% end %>

       </select>

 </div>

【问题讨论】:

  • 你提到你做了一个假用户。你也需要制作虚假的主题吗?

标签: ruby-on-rails ubuntu localhost


【解决方案1】:

在 irb ($ irb) 试试这个

> x = []
> x[0]
=> nil
> x[1]
=> nil

所以您的查询Subject.where(discipline_type: 0) 很可能返回blank array [],然后是[1..3],结果是nil,然后是each,这将导致undefined method each for nil:NilClas

您应该使用limit 函数(它指定了要检索的记录数的限制) 例如

Subject.where(discipline_type: 0).limit(3)

所以你的代码应该是这样的

<% Subject.where(discipline_type: 0).limit(3).each do |s| %>
  <option value="<%= s.id %>" <%= "selected" if @tri_id==s.id %>><%= s.name %></option>
<% end %>

【讨论】:

    【解决方案2】:

    Subject.where 返回的记录可能少于您的范围索引指定的记录。不知道为什么你在那里有[1..3]。在您的 Subject.where 上使用 each,如果您需要根据条件对其进行更多限制,请添加到 where 子句。

    <% Subject.where(discipline_type: 0).each do |s| %>
       <!-- your code here -->
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2022-12-24
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2022-07-25
      相关资源
      最近更新 更多