将联系人与用户关联

时间:2012-04-03 19:02:53

标签: ruby-on-rails ruby-on-rails-3.1

我正在为地址簿创建一个基本应用,并希望将联系人与用户相关联。

我为用户设置了身份验证,现在正在尝试将联系人表与用户关联起来。我有两个单独的控制器,一个用于用户,另一个用于联系人,然后我的计划是通过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 %>

人们可以提供任何帮助来解决此错误的确非常感谢,因为我完全陷入困境!我认为这可能与联系一词的多元化有关,但似乎找不到正确的解决方法。

非常感谢您的帮助! 汤姆

1 个答案:

答案 0 :(得分:2)

Rails在application.rb(Contact)中定义的模块与您的模型类(也是Contact)之间变得混乱。您不能在一个地方module Contact而在另一个地方class Contact(事实上,因为您处于开发模式,因此存在联系模块意味着rails甚至没有查看您的联系人.rb文件)

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