2012-06-21 3 views
0

Имея вопрос здесь с jobs_controller.rb, когда я удалить модуль DEViSE из моей job.rb модели ниже:ActiveRecord :: StatementInvalid в JobsController # создать

class Job < ActiveRecord::Base 

# Include default devise modules. Others available are: 
# :token_authenticatable, :confirmable, 
# :lockable, :timeoutable and :omniauthable 

    devise :database_authenticatable, 
      :recoverable, :rememberable, :trackable, :validatable 

# Setup accessible (or protected) attributes for your model 
attr_accessible :contact_email, :contact_phone, :description, :district, :due_date, :expiration_date, :job_title, :posting_date, :requirements, :salary, :submission_process 

end 

Я затем удалить модуль Разрабатывают и прийти полученная модель:

class Job < ActiveRecord::Base 

    # Setup accessible (or protected) attributes for your model 
attr_accessible :contact_email, :contact_phone, :description, :district, :due_date,  :expiration_date, :job_title, :posting_date, :requirements, :salary, :submission_process 

end 

Заброшенная ошибка при создании этого перехода отображается в следующей трассировке:

ActiveRecord::StatementInvalid in JobsController#create 

SQLite3::ConstraintException: constraint failed: INSERT INTO "jobs" ("contact_email",  "contact_phone", "created_at", "current_sign_in_at", "current_sign_in_ip", "description", "district", "due_date", "email", "encrypted_password", "expiration_date", "job_title", "last_sign_in_at", "last_sign_in_ip", "posting_date", "remember_created_at", "requirements", "reset_password_sent_at", "reset_password_token", "salary", "sign_in_count", "submission_process", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 

app/controllers/jobs_controller.rb:49:in `block in create' 
app/controllers/jobs_controller.rb:48:in `create' 

У меня есть модель пользователя, а также модель работы, приложение состоит из базового эшафот, позволяющего пользователям публиковать и просматривать задания, зависящие от правильной аутентификации с помощью Devise. Я относительно новичок в правильном построении контуров, и у меня больше опыта с интерфейсом, типа Rails типа Rails. Я не уверен, что мне нужно, чтобы Devise присутствовал в модели Job, или только в модели User.

ответ

0

Вообще говоря, исключение, подобное этому, означает, что вы нарушаете ограничение базы данных. Либо NOT NULL, UNIQUE, либо другой тип обеспечения безопасности данных на вашем столе.

Например, Devise устанавливает, что поля, такие как электронная почта и зашифрованный пароль, не имеют значения null. Вы можете посмотреть в db/schema.rb, чтобы увидеть ограничения и индексы, созданные для ваших таблиц.

В этой ситуации очень вероятно, что вы не заселяете атрибут encrypted_password и/или вы вставляете дублирующее письмо. You can remove these constraints with a migration if you need.

EDIT: В ответ на ваш второй вопрос вам нужно только разработать модель, с которой ваши пользователи аутентифицируются (где будет храниться их пароль). Затем для обеспечения того, чтобы пользователи могли создавать и редактировать задания, принадлежащие им, в вашем контроллере вы говорите: before_filter :authenticate_user!, а в ваших индивидуальных действиях (или в другом before_filter) вы проверяете, принадлежит ли им работа, которую они пытаются редактировать.