[Rails] DB에 데이터가 등록되지 않을 때의 해결 방법
8457 단어 PostgreSQL루비Rails5
소개
Rails5.0에서의 게시 기능 구현에서는 멈추었으므로 메모
환경
macOS Catalina
Ruby 2.5.1
Rails 5.0.7.2
PostgreSQL
어려움
form_for에서 DB에 데이터를 등록하려고했지만 오류가 발생하지 않았지만 데이터가 저장되지 않았습니다.
해결한 방법
1. GUI 앱으로 확인
▼설치방법과 DB에 접속하는 방법
PostgreSQL : PostgreSQL 데이터를 GUI로 만지기(macOS/Postico)
MySQL : Sequel Pro를 사용하여 데이터베이스를 시각화합시다.
▼DB명을 조사하는 방법
터미널에서 'psql -l' 실행
실행 결과 "app-name_development"가 대상인 DB 이름
terminal
$ psql -l #PostgreSQLのDBを一覧で表示する
#実行結果
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------------------+--------+----------+---------+-------+-------------------
app-name_development | user | UTF8 | C | C |
app-name_test | user | UTF8 | C | C |
postgres | user | UTF8 | C | C |
template0 | user | UTF8 | C | C | =c/user +
| | | | | user=CTc/user
template1 | user | UTF8 | C | C | =c/user +
| | | | | user=CTc/user
(5 rows)
2. 저장되지 않는 원인을 확인①(pry-rails)
Gemfile
group :development, :test do
gem 'pry-rails'
end
terminal
$ bundle install
post_controller.rb
def create
binding.pry #データを保存するメソッドの中に
Post.create(post_params)
end
private
def post_params
params.permit(:content, :image)
end
terminal
3: def create
=> 4: binding.pry
5: Post.create(post_params)
6: end
#params と入力
[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"zDzgsL3bOIk0QSPOFk7eSOxvqVk18RQ0PW14dC3A7JtsLB9X2pLwvJ41V/f9WeqBDRo4Uz2PKtJDvcT4WpSCRg==", "post"=><ActionController::Parameters {"content"=>"ポストの内容テストテストテスト", "image"=>"test.jpeg"} permitted: false>, "commit"=>"投稿", "controller"=>"posts", "action"=>"create"} permitted: false>
#post_params と入力
[2] pry(#<PostsController>)> post_params
Unpermitted parameters: :utf8, :authenticity_token, :post, :commit
=> <ActionController::Parameters {} permitted: true> #ハッシュの中身が空なので登録できていない
해시 인 '{}'의 내용이 비어 있기 때문에,
params.permit(:content, :image)에서 params에서 해당 키를 검색할 수 없는 이유
3. 해시의 이중 구조를 해소
post_controller.rb
def create
Post.create(post_params) #binding.pry は削除
end
private
def post_params
params.require(:post).permit(:content, :image)
#requireメソッドを使って二重構造となっているハッシュを取得
end
4. 보존되지 않는 원인을 확인②(메소드 뒤에 "!")
post_controller.rb
def create
Post.create!(post_params) #binding.pry は削除 #createの後ろに"!"
end
⇒ 어소시에이션이 짜여져 있을 때, 해당 외래 키가 들어 있지 않고, 밸리데이션으로 연주되고 있다
5. 밸리데이션에 의한 에러를 해소
post.rb
class Post < ApplicationRecord
belongs_to :user, optional: true #optional: ture を記載
end
Rails의 belongs_to에 지정할 수 있는 optional: true란?
참고 기사
htps : // 하고 싶다 l. 코m/쿠에 s치온 s/121213
htps : // 코 m / 타나카 7014 / MS / 50 A1 A 953b3f440c 481
Reference
이 문제에 관하여([Rails] DB에 데이터가 등록되지 않을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sew_sou19/items/04b8c5d6c28f22a5b496텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)