2014-01-06 69 views
0

我正在学习rails教程,并遇到错误。未定义的方法销毁为零:NilClass - in Rails教程

$ bundle exec rspec spec 

Failure/Error: expect { click_link "delete" }.should change(Micropost, :count).by(-1) 
    NoMethodError: 
    undefined method `destroy' for nil:NilClass 

有两个错误,无造成一个未定义的方法“destory”的同样的问题:NilClass

微柱控制器

class MicropostsController < ApplicationController 
before_filter :signed_in_user, only: [:create, :destory] 
before_filter :correct_user,  only: :destory 
def create 
    @micropost = current_user.microposts.build(params[:micropost]) 
    if @micropost.save 
     flash[:success] = "Micropost created!" 
     redirect_to root_path 
    else 
     @feed_items = [] 
     render 'static_pages/home' 
    end 
end 
def destroy 
    @micropost.destroy 
    redirect_to root_path 
end 
private 
    def correct_user 
     @micropost = current_user.microposts.find_by_id(params[:id]) 
     redirect_to root_path if @micropost.nil? 
    end 
end 

我想这是所有的信息需要帮助我弄清楚这个问题。无论如何,这里还有一些。

相关问题:Rails request spec not working - noMethodError

我想他们的解决方案,但它并没有区别。

_feed_item.html.erb

<li id="<%= feed_item.id %>"> 
<%= link_to gravatar_for(feed_item.user), feed_item.user %> 
<span class="user"> 
    <%= link_to feed_item.user.name, feed_item.user %> 
</span> 
<span class="content"><%= feed_item.content %></span> 
<span class="timestamp"> 
    Posted <%= time_ago_in_words(feed_item.created_at) %> ago. 
</span> 
<% if current_user?(feed_item.user) %> 
<%= link_to "delete", feed_item, method: :delete, 
    confirm: "You sure?", 
    title: feed_item.content %> 
<% end %> 
</li> 

感谢

+0

你的问题是什么? – sawa

+0

如何解决我的代码与测试一起工作?我不知道为什么摧毁是未定义的 - 它应该在控制器 – Marcus

回答

3

你有一个错字:

before_filter :correct_user, only: :destory

:destory应该是:destroy,这是造成@micropost是零。你在另一个before_filter btw中做了同样的拼写错误。

+0

谢谢,真的很感谢帮助 – Marcus

+0

噢人,我只是犯了同样的错误。 –

相关问题