2012-06-21 147 views
0

有一个问题在这里与jobs_controller.rb,当我从我下面的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有更多的经验。我不知道我是否需要在Job模型中存在Devise,或者只在User模型中。

回答

0

一般来说,像这样的异常意味着你违反了数据库约束。在您的表上使用NOT NULL,UNIQUE或其他类型的数据库实施。

例如,Devise强制邮件和加密密码等字段不为空。 您可以查看db/schema.rb以查看为表格生成的约束和索引。

在这种情况下,很可能您没有填充encrypted_password属性和/或插入重复的电子邮件。 You can remove these constraints with a migration if you need

编辑:在回答你的第二个问题时,你只需要在你的用户进行身份验证(他们的密码将被存储在哪里)的模型上进行设计。然后,要强制用户只能创建和编辑属于他们的作业,请在您的控制器中说:before_filter :authenticate_user!,并在您的个人操作(或另一个before_filter)中检查他们尝试编辑的作业是否属于他们。

相关问题