我如何修复未定义的方法`user_id'为零:NilClass?

时间:2011-06-12 04:52:38

标签: ruby-on-rails

我试图在db:migrate:reset之后启动我的服务器,突然我的SQlite3服务器无法启动。当服务器开始呈现我的ActionView::Template::Error (undefined method 'user_id' for nil:NilClass)页面时,我收到错误:datum/index。 在我这样做之前,我在我的数据库中有实际价格,因此可以检测到user_id并且一切正常但现在价格已经消失,我相信它会给出这个错误。

控制器 - Datum& Price

def index
  @prices = Price.all
end

观看次数 - datum/index& prices/index

<h1>Prices</h1>

<table>
  <tr>
    <th>User</th>
    <th>Date</th>
    <th>Price name</th>
    <th>Price</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @prices.each do |price| %>
  <tr>
    <td><%= price.user_id %></td>
    <td><%= price.date %></td>
    <td><%= price.price_name %></td>
    <td><%= price.price %></td>
    <td><%= link_to 'Show', price %></td>
    <td><%= link_to 'Edit', edit_price_path(price) %></td>
    <td><%= link_to 'Delete', price, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Price', new_price_path %>

我认为我这样做是错误的,因为我是Rails的新手。我的目标是复制我的prices/index视图,这样我的datum/index就是一样的,这样我就可以给出两种独特的外观。 如何更正此问题,我是否正确执行此操作?

2 个答案:

答案 0 :(得分:2)

我猜你不知道rake db:migrate:reset做了什么。没有描述字符串,所以不要问rake它的作用,你必须look at the source

# desc 'Resets your database using your migrations for the current environment'
task :reset => ['db:drop', 'db:create', 'db:migrate']

因此rake db:migrate:reset会破坏您的数据库(包括您在其中的所有数据),重新创建它,然后应用迁移以使所有内容再次更新。但是,您的所有原始数据仍然消失。

db:drop的{​​{1}}部分可能解释了为什么你到处都有db:migrate:reset。但是,如果您的所有数据都已消失,您应该从nil获取一个空数组,所以也许您在重置后添加了一些内容。

答案 1 :(得分:0)

很奇怪,我认为这是因为我正在使用AptanaStudio 3和git终端。我刚刚重启了所有内容,它现在开始工作,好像数据库需要时间来刷新自己。所以总的来说只需重新启动所有内容,看看它是否有效。