2012-04-03 209 views
0

我正在为通讯录创建基本应用程序,并希望将联系人与用户相关联。将联系人与用户相关联

我已经为用户设置了身份验证,现在正在尝试将我的联系人表与用户关联起来。我有两个独立的控制器,一个用于用户,另一个用于联系人,然后我的计划是通过belongs_to:user和has_many:contacts将它们关联起来。

我完全被错误难倒我不断收到虽然

undefined method `new' for Contact:Module 

据我所知,我在接触控制器正确定义新的,但由于某种原因,我不能得到这个工作。

我有以下的代码,此刻

路线:

Contact::Application.routes.draw do 

get "sessions/new" 
get "logout" => "sessions#destroy" 

controller :user do 
get "signup" => "user#new" 
end 

resources :users, :controller => 'user' 

controller :sessions do 
get "login" => "sessions#new" 
post "login" => "sessions#create" 
delete "logout" => "sessions#destroy" 
end 

controller :dashboard do 
get "home" => "dashboard#home" 
end 

controller :contact do 
get "newcontact" => "contact#new" 
end 

resources :contacts, :controller => 'contact' 

root :to => 'sessions#new' 


end 

联系控制器

class ContactController < ApplicationController 
def new 
@contact = Contact.new 
end 

def create 
@contact = Contact.new (params[:contact]) 
    if @contact.save 
    redirect_to root_url 
    else 
    render "contact#new" 
end 
end 
end 

联系/新形式

<%= form_for @contact do |f| %> 

<% if @contact.errors.any? %> 
    <div class="error_messages"> 
    <h2>Form is invalid</h2> 
     <ul> 
      <% for message in @contact.errors.full_messages %> 
       <li><%= message %></li> 
      <% end %> 
     </ul> 
    </div> 
<% end %> 
<div class = "name-field"> 
    <%= f.text_field :name, :placeholder => "Name" %> 
</div> 

<div class = "company-field"> 
    <%= f.text_field :company, :placeholder => "Company" %> 
</div> 

<div class = "email-field"> 
    <%= f.text_field :email, :placeholder => "Email" %> 
</div> 

<div class = "phone-field"> 
    <%= f.text_field :phone, :placeholder => "Phone" %> 
</div> 

<div class = "mobile-field"> 
    <%= f.text_field :mobile, :placeholder => "Mobile" %> 
</div> 

<div class="actions"><%= f.submit "Add Contact" %></div> 
</div> 
<% end %> 

任何帮助的人能提供至修复这个错误真的会非常感激,因为我完全卡住了!我认为这可能与联系一词的多元化有关,但似乎找不到解决问题的正确方法。

非常感谢您的帮助! Tom

+0

类的ContactController Mishaux 2012-04-04 00:30:18

+0

您可以为错误的回溯? – Ekampp 2012-04-05 07:22:12

+0

@Mishaux - 我试着改变ContactController到ContactsController,而是接收'期望的C:/Sites/contact/app/controllers/contact_controller.rb来定义ContactController'。 – 2012-04-06 09:10:38

回答

2

Rails在application.rb(Contact)中定义的模块和您的模型类(也是Contact)之间混淆不清。你不能在另一个在一个地方module Contactclass Contact(事实上,因为你在开发模式的时候,该联系人模块存在意味着轨道的事实甚至没有看你的contact.rb文件)

你将不得不重新命名其中的一个。应用程序可能更容易更改 - 只需将Contact::Application的所有实例替换为(例如)ContactApp::Application,并将application.rb中的module Contact更改为模块ContactApp。你也几乎不会输入应用程序模块的名称,所以它有一个不太和谐的名字,这并不是什么大不了的事情。

+0

非常感谢Fred,它的工作效率达到100%,联系人甚至可以正确保存到我的数据库中。再次感谢这个优秀的答案! – 2012-04-08 20:14:42