0

以下のjob.rbモデルからDeviseモジュールを削除すると、ここでjobs_controller.rbに問題が発生します。

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

次に、Devise モジュールを削除し、結果のモデルに到達します。

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 に関する経験は豊富です。Devise が Job モデルに存在する必要があるのか​​、それとも User モデルにのみ存在する必要があるのか​​ わかりません。

4

1 に答える 1

0

一般的に言えば、このような例外は、データベースの制約に違反していることを意味します。テーブルに対する NOT NULL、UNIQUE、またはその他の種類のデータベース強制。

たとえば、Devise は、電子メールや暗号化されたパスワードなどのフィールドが null にならないように強制します。db/schema.rbテーブルに構築された制約とインデックスを調べることができます。

この状況では、encrypted_password属性を入力していないか、重複した電子メールを挿入している可能性が非常に高くなります。必要に応じて、移行によってこれらの制約を取り除くことができます

編集: 2 番目の質問への回答では、ユーザーが認証するモデル (パスワードが保存される場所) についてのみ工夫する必要があります。次に、ユーザーが自分に属するジョブのみを作成および編集できるようにするために、コントローラーで次のように言いbefore_filter :authenticate_user!ます。個々のアクション (または別の before_filter) で、ユーザーが編集しようとしているジョブがユーザーに属していることを確認します。

于 2012-06-21T21:00:32.337 に答える