Связывание контактов с пользователем - PullRequest
0 голосов
/ 03 апреля 2012

Я создаю базовое приложение для адресной книги и хотел бы связать контакты с пользователями.

Я настроил аутентификацию для пользователей и сейчас пытаюсь связать свою таблицу контактов с пользователями.У меня есть два отдельных контроллера, один для пользователей, а другой для контактов, и затем я планирую связать их с помощью own_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 Ответ

2 голосов
/ 08 апреля 2012

Rails путается между модулем, определенным в application.rb (Contact), и вашим классом модели (также Contact).Вы не можете иметь module Contact в одном месте и class Contact в другом (фактически, поскольку вы находитесь в режиме разработки, тот факт, что модуль Contact существует, означает, что rails даже не смотрит на ваш файл contact.rb)

Вам придется переименовать одного из них.Приложение может быть легче изменить - просто замените все экземпляры Contact::Application на (например) ContactApp::Application и замените module Contact в application.rb на модуль ContactApp.Вы также почти не вводите имя модуля приложения, так что его имя с немного диссонансом не представляет особой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...