20211026のRubyに関する記事は6件です。

CRUD処理 Ruby on Rails(データベース編集方法)

データベースにおけるデータの編集や削除の方法まとめ railsのデータベースについて学んでいる時にCRUD処理について学びましたが、なかなか理解ができずまとめてみました。 ※本記事では、ageとnameが保存してあるUsersテーブル上で,データの作成、編集方法を記しました。 ・Create処理(データの追加) $ User.create(name:”A”,age:100) ・Read処理(データを読み込み) $ User.all #Usersテーブルのすべてのデータを参照 $ User.find(3) #id名からの読み込み $ User.find_by(name:”C”)  #古いものから1つ $ User.where(age:12)  #複数の検索 ・Update処理 $ user = User.find(1) #id(1)のデータをuserに代入 $ user.age = 22 #ageを22に変更 $ User.save #保存 ・Delete処理 $ user = User.find(1) #id(1)のデータをuserに代入 $ User.destroy #削除
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

`Bio::GenBank` なオブジェクトをファイルに書き出す

Bio::GenBank なオブジェクトをファイルに書き出す bioruby で起動したシェルでは、 getent したデータを savefile することができる。 biopython だと SeqIO.write() で書き出すことができる。 しかし、 bioruby ではなく Ruby のプログラム内で Bio::NCBI::REST::Efetch で取得し、パースして Bio::GenBank になったオブジェクトをファイルに書き出したかったので調べた結果を記録する。 できた方法 Bio::DB に実装されている tags() と get() を使う。 obj = ... # Bio::GenBank のオブジェクトが入っている File.open("sample.gbk", "w") do |f| obj.tags.each do |tag| f.puts obj.get(tag) end end Ruby の Hash は登録順で key と value が保持されているようなのでこれでもとの gbk に復元できる。 できなかった方法 to_s obj = ... File.open("sample.gbk", "w") do |f| f.puts obj.to_s end "#<Bio::GenBank:...>" がファイルに書き出されてしまう。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ユーザー管理機能初期手順①!

①.ログイン機能の実装! ユーザー関連の機能はGemを使用します! まず、ログイン機能を実装するために、deviseというGemを使用します! ・devise ユーザー管理機能を簡単に実装するためのGemです! 実際に運用されている多くのRailsアプリケーションサービスで使用されています! Gemfileを編集します! 追記する場所は、Gemfileの最後の行です! Gemfile # 中略 gem 'devise' 次にコマンドを実行してGemをインストールします! ターミナル # Gemをインストール % bundle install 次にローカルサーバーを再起動します! Gemをインストールした後はrails sをcontrol + Cで一度停止し、サーバーを再起動する必要があります! これは、インストールしたGemの反映するタイミングが、サーバー起動時だからです! ターミナル # Gemをインストール後 % rails s 次のステップへ行きます! ②.deviseの設定ファイルを作成! deviseを使用するためには、Gemのインストールに加え、 devise専用のコマンドで設定ファイルを作成する必要があります! ・rails g devise:installコマンド このコマンドは、追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンドです! ターミナル # deviseの設定ファイルを作成 % rails g devise:install 以下のようなログが流れれば成功です! ターミナル create config/initializers/devise.rb create config/locales/devise.en.yml =============================================================================== Depending on your application's configuration some manual setup may be required: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb: config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } In production, :host should be set to the actual host of your application. * Required for all applications. * 2. Ensure you have defined root_url to *something* in your config/routes.rb. For example: root to: "home#index" * Not required for API-only Applications * 3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example: <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> * Not required for API-only Applications * 4. You can copy Devise views (for customization) to your app by running: rails g devise:views * Not required * =============================================================================== *deviseのバージョンによって出力結果が異なる場合があります! これでファイルは作成されます! 次のステップに行きます! ③.deviseのUserモデルを作成! deviseを利用する際には、ユーザー情報を管理するためのUserモデルを新しく作成する必要があります! 作成には通常のモデルの作成方法ではなく、deviseのモデル作成用コマンドでUserモデルを作成します! 下記の指示に従い、ログイン機能を持つUserモデルを作成しましょう! ・rails g deviseコマンド rails g deviseコマンドは、deviseによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめて処理します! 実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加されます! rails g deviseコマンドでuserを指定します! ターミナル # deviseコマンドでUserモデルを作成 % rails g devise user 実行して以下のようなログが出力されれば成功です! ターミナル invoke active_record create db/migrate/20200309082300_devise_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml insert app/models/user.rb route devise_for :users ユーザーに関する、モデルやマイグレーションも自動生成されています! また、routes.rbに以下のルーティングが自動的に追記されます! config/routes.rb Rails.application.routes.draw do devise_for :users <-この部分が自動的に追記される root to: 'eats#index' resources :eats end devise_forは、ユーザー機能に必要な複数のルーティングを一度に生成してくれるdeviseのメソッドです! *モデルとマイグレーションは作成されましたが、まだusersテーブルは作成されていません。 ④.テーブルを作成! 先ほど自動生成されたマイグレーションファイルを使用して、テーブルを作成します! テーブルを作成する前に、どのようなテーブルを作成するのか確認します! 先ほどのrails g devise userコマンドで作成されたマイグレーションファイルを開きます! db/migrate/20XXXXXXXXX_devise_create_users.rb (例)config/routes.rb class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at # 省略 t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end マイグレーションファイルを確認すると、すでに記述がある項目があります! db/migrate/20XXXXXXXXX_devise_create_users.rb t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" メールアドレスのカラムを作成する記述があり、パスワードのカラムを作成する記述もあります! db/migrate/20XXXXXXXXX_devise_create_users.rb t.timestamps null: false レコードの作成日時と更新日時を管理するためのカラムです! こちらはdeviseに関係なく、マイグレーションファイルが生成された際に、初期状態で記述してあります! ここまでで、テーブルの設計が確認できたので、マイグレーションを実行します! ターミナル # マイグレーションを実行 % rails db:migrate これで、usersテーブルが作成されました! Sequel Proでusersテーブルを確認し、usersテーブルが作成されていれば成功です! テーブル・カラム情報を変更したため、ローカルサーバーを再起動します! ターミナル ローカルサーバーを起動 % rails s これでlocalhostへアクセスしても問題なく動作します! ⑤.まとめ 簡単に言うと! deviseとは、ユーザー管理機能を簡単に実装するためのGemのこと! rails g devise:install コマンドとは、deviseというGemの設定関連に使用するファイルを自動で生成するコマンドのこと! rails g deviseコマンドとは、deviseの中で使用するユーザーモデルclass名を置き換え、modelなど必要なファイルを生成するコマンドのこと! と言う感じだと思います! 手順通りやっていけば問題ないと思います! 次回続きを記述していきます! 何か説明で間違っていたらご指導お願い致します(_ _)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails]初心者でほぼぶっつけ本番で映画レビューサイトを作ってみた件

前置き もう3年近く前の話で、すごい今更で記憶もちょっと曖昧ですけど、記録としてまとめてみようと思いました(笑) 就活と学校の進級制作展兼コンテストのために作ったものなので、結構力を入れました かなり昔に一度だけRuby on Railsを触ったことがあるが、その時はまだjava初心者レベルでhtml/cssやhttpやデータベースなどの知識も一切なかったので、全く理解できず諦めました。 今回は学校の授業でhtml/cssを習って、http関連知識やSQL構文などを少し触ったおかけで、チュートリアルを読みながら書いてましたが、思ったより早いペースで順調に進めることができました。 完全に自分の作品なので、試してみたいことをとりあえず一通り詰め込んでみましたw 画面 URL https://moasis.herokuapp.com/ (パソコン画面のために作ったので、スマホ画面のレイアウトは超軽く調整しただけ) 管理者アカウント:julia@example.com/password ホームページ (どうでもいい情報:名前はMOVIE+OASISの組み合わせによる造語、ロゴも合わせて映画のイメージと木のの組み合わせ設計しましたw) 使用した映画DB及びrailsのAPI利用ツール こちらの記事でまとめました https://qiita.com/julia817/items/522da21edee1bf69994b 詰まってたところ チュートリアルのuserモデルとSNSアカウントでログインする機能が衝突によるエラーが発生 こちらの記事でまとめました https://qiita.com/julia817/items/7908c01984a291b74966 ページネーション チュートリアル通りに試してみましたが、will_paginate gemは確か配列に対応しないので、うまくいかなかったです 調べてみた結果、kaminari gemを使用することにしました 全然記憶がないけど、ぱっと見bootstrapとかは多分これぽい記事を参考したと思います データベースの構築 完全の初心者でマークした映画リストをどうやってユーザと結びつくとかも全然わからなくて、映画をサンプルした記事もほどんとなかったので、音楽リストなどの記事を色々調べて真似してみたらうまく行きましたw (プレゼンのために軽く図を書いたけど、保存しなかったかも..もし見つかったらまた追記する) 画像アップロード なんかリサイズとか色々全然うまくいかなくて、結構詰まってましたが、時間もあんまりないので、最低限のアップロード機能しか実装してないです。本番S3に切り替えるのも諦めて、プロフィール画像アップロードしても30分後ぐらいにデフォルト画像に戻ります おすすめツール グラフ(chartkick) https://chartkick.com/ 一行で簡単にグラフを作れる カウンターキャッシュ(counter_culture) https://github.com/magnusvk/counter_culture 高度なカウンターキャッシュ機能で、「いいね」カウンターとして使いました SNS共有(addthis) https://www.addthis.com/ 2行でSNS共有ボタンを追加できるツール 最後に 一応ソースコードも公開します:https://github.com/julia817/moasis ご参考まで... とにかく試しに一つの成果物を完成させたいという感覚でしたので、コードの細かいところは全然気にしてなかったし、バグや未完成の部分はもう完全に放置状態です(笑) とにかく作品作りの達成感と爽快感が最高です!! これからも頑張って行きます!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails.application.secrets.secret_key_baseをherokuの本番環境で適用する

本番環境でRails.application.secrets.secret_key_baseが原因で本番環境でjwtを使うことができなかったのでメモを残します。 エラーの原因調査 エラーのログ heroku logs -tail 2021-10-25T12:59:16.093104+00:00 heroku[router]: at=info method=OPTIONS path="/v1/accounts" host=api-slack-react-ruby.herokuapp.com request_id=b010205a-d1b1-4436-aa04-ad84e944e2ea fwd="153.246.218.124" dyno=web.1 connect=0ms service=1ms status=200 bytes=287 protocol=https 2021-10-25T12:59:16.273962+00:00 heroku[router]: at=info method=GET path="/v1/accounts" host=api-slack-react-ruby.herokuapp.com request_id=0e2bccc5-9a32-4ccf-9689-e8e375ea8556 fwd="153.246.218.124" dyno=web.1 connect=0ms service=3ms status=500 bytes=374 protocol=https 2021-10-25T12:59:16.271652+00:00 app[web.1]: I, [2021-10-25T12:59:16.271587 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Started GET "/v1/accounts" for 153.246.218.124 at 2021-10-25 12:59:16 +0000 2021-10-25T12:59:16.272513+00:00 app[web.1]: I, [2021-10-25T12:59:16.272471 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Processing by V1::AccountsController#callback as HTML 2021-10-25T12:59:16.273001+00:00 app[web.1]: I, [2021-10-25T12:59:16.272917 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms | Allocations: 130) 2021-10-25T12:59:16.273322+00:00 app[web.1]: F, [2021-10-25T12:59:16.273291 #4] FATAL -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] 2021-10-25T12:59:16.273322+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] JWT::DecodeError (No verification key available): 2021-10-25T12:59:16.273323+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] 2021-10-25T12:59:16.273323+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] lib/j_w_t/helper.rb:12:in `decode' 2021-10-25T12:59:16.273324+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] app/models/concerns/j_w_t/authenticatable.rb:23:in `authenticate!' 2021-10-25T12:59:16.273325+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] app/controllers/concerns/authenticatable.rb:15:in `authenticate_account!' でみてみると 2021-10-25T12:59:16.273322+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] JWT::DecodeError (No verification key available): ここらへんが原因だと思う 該当するコードが以下 helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.secrets.secret_key_base, verify, **opts) end 原因としてはRails.application.secrets.secret_key_baseが怪しいと思ったので、調査してみると。。。 heroku run bash rails c Rails.application.secrets.secret_key_base やはりnilが返ってきていた。 すこし原因調査が長くなってしまったが、ここから解決していこうと思う 試した方法 rails consoleでRails.application.secrets.secret_key_baseの値を取得後に、heorkuの環境変数にSECRET_KEY_BASEをセット ↓ 変わらず。。。 herokuの環境変数にRAILS_MASTER_KEYをセット heroku config:set RAILS_MASTER_KEY=cat config/master.key ↓ 変わらず。。。 Rails.application.secret.secret_key_baseをRails.application.credentials.secret_key_baseに変更した helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.secrets.secret_key_base, verify, **opts) end helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.credentials.secret_key_base, verify, **opts) end ↓ うまく行った!!! 結論 herokuの環境変数にRAILS_MASTER_KEYをセットし、Rails.application.secret.secret_key_baseをRails.application.credentials.secret_key_baseに変更するとうまく行った! うまく行った理由を調べてみると、Railsは5.1から秘匿情報をsecret.ymlではなく、credentials.yml.encで管理するようになったらしい。 そのため、secret_key_baseの参照先もsecretsからcredentialsに変わったということだろう。 また、秘匿情報を見るためにはmaster keyを環境変数にセットする必要があるので2.で試したことも有効だったと考えられる。 かなり時間を使ってしまったが、解決することができてよかった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails secret_key_baseをherokuの本番環境で適用する

本番環境でRails.application.secrets.secret_key_baseが原因で本番環境でjwtを使うことができなかったのでメモを残します。 エラーの原因調査 エラーのログ heroku logs -tail 2021-10-25T12:59:16.093104+00:00 heroku[router]: at=info method=OPTIONS path="/v1/accounts" host=api-slack-react-ruby.herokuapp.com request_id=b010205a-d1b1-4436-aa04-ad84e944e2ea fwd="153.246.218.124" dyno=web.1 connect=0ms service=1ms status=200 bytes=287 protocol=https 2021-10-25T12:59:16.273962+00:00 heroku[router]: at=info method=GET path="/v1/accounts" host=api-slack-react-ruby.herokuapp.com request_id=0e2bccc5-9a32-4ccf-9689-e8e375ea8556 fwd="153.246.218.124" dyno=web.1 connect=0ms service=3ms status=500 bytes=374 protocol=https 2021-10-25T12:59:16.271652+00:00 app[web.1]: I, [2021-10-25T12:59:16.271587 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Started GET "/v1/accounts" for 153.246.218.124 at 2021-10-25 12:59:16 +0000 2021-10-25T12:59:16.272513+00:00 app[web.1]: I, [2021-10-25T12:59:16.272471 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Processing by V1::AccountsController#callback as HTML 2021-10-25T12:59:16.273001+00:00 app[web.1]: I, [2021-10-25T12:59:16.272917 #4] INFO -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms | Allocations: 130) 2021-10-25T12:59:16.273322+00:00 app[web.1]: F, [2021-10-25T12:59:16.273291 #4] FATAL -- : [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] 2021-10-25T12:59:16.273322+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] JWT::DecodeError (No verification key available): 2021-10-25T12:59:16.273323+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] 2021-10-25T12:59:16.273323+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] lib/j_w_t/helper.rb:12:in `decode' 2021-10-25T12:59:16.273324+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] app/models/concerns/j_w_t/authenticatable.rb:23:in `authenticate!' 2021-10-25T12:59:16.273325+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] app/controllers/concerns/authenticatable.rb:15:in `authenticate_account!' でみてみると 2021-10-25T12:59:16.273322+00:00 app[web.1]: [0e2bccc5-9a32-4ccf-9689-e8e375ea8556] JWT::DecodeError (No verification key available): ここらへんが原因だと思う 該当するコードが以下 helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.secrets.secret_key_base, verify, **opts) end 原因としてはRails.application.secrets.secret_key_baseが怪しいと思ったので、調査してみると。。。 heroku run bash rails c Rails.application.secrets.secret_key_base やはりnilが返ってきていた。 すこし原因調査が長くなってしまったが、ここから解決していこうと思う 試した方法 rails consoleでRails.application.secrets.secret_key_baseの値を取得後に、heorkuの環境変数にSECRET_KEY_BASEをセット ↓ 変わらず。。。 herokuの環境変数にRAILS_MASTER_KEYをセット heroku config:set RAILS_MASTER_KEY=cat config/master.key ↓ 変わらず。。。 Rails.application.secret.secret_key_baseをRails.application.credentials.secret_key_baseに変更した helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.secrets.secret_key_base, verify, **opts) end helper.rb def decode(token, verify: true, **opts) JWT.decode(token, Rails.application.credentials.secret_key_base, verify, **opts) end ↓ うまく行った!!! 結論 herokuの環境変数にRAILS_MASTER_KEYをセットし、Rails.application.secret.secret_key_baseをRails.application.credentials.secret_key_baseに変更するとうまく行った! うまく行った理由を調べてみると、Railsは5.1から秘匿情報をsecret.ymlではなく、credentials.yml.encで管理するようになったらしい。 そのため、secret_key_baseの参照先もsecretsからcredentialsに変わったということだろう。 また、秘匿情報を見るためにはmaster keyを環境変数にセットする必要があるので2.で試したことも有効だったと考えられる。 かなり時間を使ってしまったが、解決することができてよかった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む