2016-07-08 97 views
0

构建一个简单的电话簿应用程序,并有关于以下关注:未定义的方法`号为无:NilClass

我列出的联系人的每个人都有一个号码资源,并定义它们之间的关系在路由文件作为如下:

config/routes.rb 
resources :contacts do 
    resources :numbers 
    end 

在我的webapp到目前为止,我有它,以便用户可以创建一个联系人,然后创建与该联系人对应的数字。我列出了号码的联系人,当用户点击它(以路线编号#显示页面,查看具体的数字,我收到以下错误:

NoMethodError in NumbersController#show 
undefined method `numbers' for nil:NilClass 

我有这个错误大量的时间,而且总是发生这种情况,因为联系人没有正确实例化,但在我的代码中,根据我的rails控制台探索,所有东西都被正确地保存到数据库下面是抛出错误的代码,在我的数字控制器:

def set_number #to do item 
     @number = @contact.numbers.find(params[:id]) 
    end 

而且传递的参数,根据错误页面,如下:

Parameters: 

{"contact_id"=>"1", 
"id"=>"1"} 

我设置@contact通过该方法中的数字控制器:

def set_contact 
     @contact = Contact.find(params[:contact_id]) 
end 

和我把它在顶部为这样:

before_action :set_contact 

鉴于有参数,和Rails控制台告诉我联系人和号码保存得当,任何想法有什么不对?

+0

可你实际上只是张贴了整个数字控制器以及用户点击该链接的提高了错误? –

+1

你必须在你的'before_action:set_number'之前有你的'before_action:set_contact',否则你在调用':set_number'时''contact'' – dpedoneze

+0

'@number = Number.find(params [:id ])'就足够了,你不必看着'@ contact'找到'number' – lusketeer

回答

1

正如我张贴评论运行:

你必须有你的before_action :set_contactbefore_action :set_number之前,否则你不会有@contact当致电:set_number时。

所有的顺序before_action运行你加入他们:)

干杯

1

很明显,错误似乎是在您的控制器内的set_number方法。原因是@contact是零。

因此,如上述评论,您set_contact方法可后set_number

相关问题