20210728のRubyに関する記事は8件です。

[Ruby]renderメソッド記述時のインスタンス変数の動き

はじめに 本記事では、renderメソッド記述時のインスタンス変数の動きをまとめました。 初学者の方々はとても重要な部分になります。 ぜひ覚えましょう。 renderメソッドとは 部分テンプレートを呼び出す際に利用するメソッドです。 呼び出す部分テンプレートは、partialというオプションで指定します。 partialオプション 部分テンプレート名を指定することで、該当する部分テンプレートを表示できます。 (例)_form.html.erbという部分テンプレート呼出 <% render partial: "form" %> localsオプション 部分テンプレート内でその変数を使えるようになります。 local『s』です!! localではありません。 sを忘れてはなりません!! <% render partial: "sample", locals: { post: "Sunplaza_Nakano" } %> 上の記述では、 部分テンプレート内において「Sunplaza_Nakano」という 文字列の代入されたpostという変数が使えるようになります。 本題です インスタンス変数がいろんなところで受け渡しされます。 (例) 今回は、newアクションを焦点にしていきます。 コントローラーでインスタンス変数「@prototype」を生成し、ビューへ渡します。 class PrototypesController < ApplicationController def index @prototypes = Prototype.all end def new @prototype = Prototype.new end ・ ・ ・ 省略 ・ ・ ・ end ビューが「@prototype」を貰います。 その後、部分テンプレートを生成する機会があったとし、renderメソッドを使用します。 そこで、部分テンプレート用にlocalsの部分で、 「@prototypes」をさらに「prototype」という変数にします。 その後、前述で説明した「partialオプション」にて"form"の指定があるので、 _form.html.erbへ「prototype」を渡します。 <div class="main"> <div class="inner"> <div class="form__wrapper"> <h2 class="page-heading">新規プロトタイプ投稿</h2> <%# 部分テンプレートでフォームを表示する %> <%= render partial: "form", locals: { prototype: @prototype } %> </div> </div> </div> _form.html.erbにて「prototype」を貰います。 formメソッドに着目すると、 「model:prototype」 と記述されています。 <%= form_with model: prototype, local: true do |f|%> <div class="field"> <%= f.label :title, "タイトル" %><br /> <%= f.text_field :title, id:"prototype_title" %> </div> ・ ・ ・ 省略 ・ ・ ・ <% end %> このように変数たちは移動しています。 この移動は、アクションごとに追う必要があります。 注意しましょう。 終わりに 現在、学習中のカリキュラムをほぼ終え、 自分の手で、コードを記述しているフェーズになっています。 その際に、理解しているようで理解していなかった部分を今回記事にしました。 引き続き、頑張りましょう!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コロナで不健康になった人の為に、健康に特化したレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

独学・未経験者がレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ポートフォリオ】独学・未経験者がレシピサイト作ってみた。AWS/Rails/Puma/Nginx

はじめに 現在、高校3年生でプログラミング歴は約1年半です。 プログラミング歴 2020/2~ HTML/CSS/JavaScript(jQuery) 2020/10~ Python/Django・Flask 2021/5~ Ruby/Rails 60日程度でレシピサイトをリリースしました。 現在も作成段階ですが、ある程度形になったのでこの記事を書いています。 ※随時更新中です。 筋肉食堂(Muscle meal) 筋肉食堂(Muscle meal) はダイエットやトレーニングをしている方に向けた、健康に特化したレシピサイトです。 URL https://muscle-meal-recipes.com/ https://github.com/holasoynaoki/muscle_meal 作成に至った経緯 コロナウイルスが流行している今日では、健康に関して2つの問題が発生すると考えました。 外出自粛の影響で運動不足になり、不健康な人が増える 人と会う回数が減り、精神的な苦痛を受ける人が増える これらの問題を解決するために、健康を支える重要な要素である「食事」にフォーカスしました。 外食があまりできない影響で自炊をする方が増えたため、健康に特化したレシピサイトを作ることで、少しでも多くの人の健康状況を助けることが出来ると考えています。 また、食事を通して趣味・趣向が合う方と繋がることで、精神的にも豊かにすることが出来るのではないかと考えました。 以上の理由により、作成に至りました。 ER図 インフラ構成図 機能一覧 基本機能 会員登録・ログイン機能(devise) ユーザーフォロー機能 (Ajax) プロフィールページ機能 プロフィール登録情報変更(ユーザー名、ニックネーム、自己紹介文、プロフィール画像) 通知機能 投稿に関する機能 新規登録機能 画像投稿機能 カロリー自動計算機能(Ajax) 投稿いいね機能(Ajax) 投稿キーワード・タグ検索機能 投稿ソート機能(いいね順・新着順・古い順) ページネーション(Kaminari) その他 ヘッダーハンバーガーメニュー 今後の改善点 テストを充実させる 開発環境にDockerを使用する Circle CIの使用によるテスト・ビルド・デプロイの自動化 どのように学習(開発)したか? 学習(開発)のポイントとして、仮説→実行→反省を回すことを意識しました。 まず、最低限のスキルを「ある程度動くサービスをリリースする」と仮説を立て、Railsを中心に学習をしました。 最初はインフラにHerokuを使用し、まずはネット上に公開することを目指しました。 RailsとHerokuは約1ヶ月でできるようになりました。 Python/Djangoの知識があったのである程度理解は早かったと思います。 次に、他の未経験者のポートフォリオを拝見し、自分にはインフラの知識(主にAWS)が足りないと仮説を立てました。 なので、「作ったサービスをAWSでデプロイする」という目標を立てました。 AWSに関しては、デプロイするだけでなくRoute53でのドメイン設定やSSL化など様々な工程を踏むことで、インフラの基礎知識をつけていきました。 デプロイに関しては約2週間でできました。 今後の学習予定としては テストを充実させる 開発環境にDockerを使用する Circle CIを使用し、継続的なサービスにする これらを学習/開発していきたいと思っています。 開発を経ての反省 開発する順序に反省があったと感じました。 実際に行った順序 ローカル環境である程度動くサービス herokuにデプロイ インフラをAWSに変更 サービス向上 理想の順序 企画 AWSにデプロイ(インフラを整える) サービスを開発 テスト 実際に行った順序では、余計なエラーなどが発生してなかなか厄介でした。 1ヶ月以上かけて作ったサービスが504 Gateway Time-outや502 Bad Gatewayなどで見られなくなったときは非常に焦りました。 なので今後開発していく方には、インフラなどを整えるところから始めることを勧めます。 最後に Python/Djangoでの開発経験があったおかげでMVCモデルなどの概念があったため、スムーズに開発を進めることができました。 しかし、サービスをリリースすることは容易ではありませんでした。 開発中には、何度も難しいところが出てきました。 Trelloなどを使用し、課題を明確にする 順序を付け、1個づつタスクをこなす このやり方で着実に進めることができました。 今後は、よりサービスを向上させていくと同時に、たくさんの知識をつけていきたいと思っています。 今後のサービス向上のため、誤っている箇所やおかしいと思う箇所がございましたら、コメントの方でご指導願います。 質問に関しては、コメントの方にいただければ出来る限り返答したいと思っておりますので、ご気軽にコメントしていただければと思います。 最後まで読んでくださりありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】アプリ 新規作成 サーバー起動 手順

新規アプリ作成〜サーバー起動までを最短で行う方法を記述してます 環境 Ruby 3.0.2 Rails 6.1.4 MySQL 5.6 ※環境を合わせると、エラー最小限で進められると思います 新規アプリ作成 MySQLを使用する場合 $rails new <アプリ名を記入> -d mysql sqlite3を使用する場合 $rails new <アプリ名を記入> データベース設定 config/database.ymlで以下を設定する database.yml default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root ←MySQLのユーザー名がrootでない場合は変更する password: "<MySQLのパスワードを記入>" socket: /tmp/mysql.sock development: <<: *default database: <アプリ名>_development データベース作成 以下のコマンドを実行 $ rails db:create 以下が表示されればOK Created database '<アプリ名>_development' Created database '<アプリ名>_test' サーバー起動 ①以下のコマンドを実行 $ rails s ②GoogleCrome等で、localhost:3000を開いて、以下の画面が表示されれば完璧 参考資料 備考 最短で起動したかったので、自分で記事を作成してみました。 不備などあれば教えていただけますと助かります
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecord::NoDatabaseError

環境 Ruby 3.0.2 Rails 6.1.4 事象 以下を実行するとエラーが表示された。 ①新規Railsアプリを作成(rails new) ②サーバーを起動(rails s) ③config/database.ymlにMySQLの接続情報を追記 ④localhost:3000を開く ActiveRecord::NoDatabaseError 解決策 以下を実行。 rails db:create 「データベースがないよ」というエラーなので、データベースを作ってあげればOK サーバーを再起動後にリロードしたら、Railsのデフォルト画面が表示されました 参考資料
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecord::ConnectionNotEstablished【MySQL】

環境 Ruby 3.0.2 Rails 6.1.4 事象 以下を実行するとエラーが表示された。 ①新規Railsアプリを作成(rails new) ②サーバーを起動(rails s) ③localhost:3000を開く。 ActiveRecord::ConnectionNotEstablished 解決策 config/database.ymlでパスワードを設定 default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: "<パスワード>" socket: /tmp/mysql.sock development: <<: *default database: <アプリ名>_development この後、ActiveRecord::NoDatabaseErrorが出ましたが、これはこちらにまとめて置きます。 参考資料
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails_admin+cancancanで管理者機能実装を5ステップで解説!

Railsで管理者機能というと、 namespaceで一般ユーザーと管理者をわけて、管理者側の機能を一から自分で実装する方法や、 rails_admin、active_admin、Administrateといった管理機能のgemを使う方法が挙げられると思います。 その中でも今回は、rails_adminというgemを使って管理者機能の実装をしていきます。 管理者機能の実装方法選択において、この記事がわかりやすかったので、まだどの方法で実装するか悩んでる方は参考にしてみてください。 rails管理画面系gem比較してみた 開発環境 ruby 2.6.3 Rails 5.2.6 前提 まず前提として、deviseを使ってユーザー認証機能が実装済みであること。 管理者権限を付与する際にユーザーに管理者の判定をするカラムをつけるか、adminなどの管理者用のテーブルを作るかの2つがありますが、今回は前者のユーザーに管理者の判定をするカラムを追加していきます。 5ステップで解説 rails_adminとcancancanを使った管理者機能実装は5ステップ! gemのインストール rails_adminの設定 adminカラム追加 cancancanの設定 管理者画面へのリンクの作成 gemのインストール まずは、rails_adminとcancancan2つのgemをインストールします。 Gemfile gem 'cancancan' gem 'rails_admin' Gemfileに追加できたらインストールします。 $ bundle rails_adminの設定 では、rails_adminのセットアップを行っていきます。 ターミナルで下記コマンド実行 $ rails g rails_admin:install Where do you want to mount rails_admin? Press <enter> for [admin]と聞かれます。 管理者画面のパスはどうする?という意味で、今回はデフォルトの/adminでOKなので、Enterを押します。 すると、管理者画面へのルーティングとrails_adminの設定ファイルが作られます。 では作られたrails_adminの設定をいじっていきます。 config/initializers/rails_admin.rbの下記設定2つのコメントアウトを外します。 config/initializers/rails_admin.rb : # == Devise == config.authenticate_with do warden.authenticate! scope: :user end config.current_user_method(&:current_user) # == CancanCan == config.authorize_with :cancancan : これでrails_adminでのdeviseとcancancanの設定は完了です。 userモデルにadminカラム追加 次に、どのユーザーが管理者なのかを判定するために、userテーブルにadminカラムを追加していきます。 adminカラムはboolean型でデフォルトの値はfalseで、trueのときに管理者として扱います。 ターミナルでadminカラムを追加。 $ rails g migration AddAdminToUser admin:boolean マイグレーションファイルが作成されるので、デフォルトをfalseにしておきます。 マイグレーションファイル class AddAdminToUser < ActiveRecord::Migration[5.2] def change # default: falseを追加 add_column :users, :admin, :boolean, default: false end end マイグレーションファイルへの追加ができたら、反映させます。 $ rails db:migrate これで、もともとあったuserテーブルにadminカラムを追加できました。 管理者権限をつけたいユーザーのadminカラムをtrueにしていきます。 $ rails c > user = User.find(1) > user.update_attribute(:admin, true) 他にもseedファイルで管理者用のデータを用意する方法もあります。 cancancanの設定 そもそもcancancanとは、ユーザーに権限を与えるものです。 管理者であれば全ての機能を使えて、ユーザーは投稿、編集しかできないのようなものです。 では、cancancanのセットアップを行っていきます。 $ rails g cancan:ability コマンドを実行すると、権限を管理するファイルが作られます。 app/models/ability.rbで、管理者の権限設定をしていきます。 10行目から14行目のif user.admin?のところを書き換えていきます。 app/models/ability.rb def initialize(user) : # ログインしているかつadminカラムがtrueの場合 if user && user.admin? # rails_adminへのアクセスを許可 can :access, :rails_admin # 全ての機能を使えるように設定 can :manage, :all end : end ログインしていて、adminカラムがtrueのユーザーは、rails_adminへのアクセス権限があり、全てのモデルのCRUDが行える状態になってます。 管理者画面へのリンクの作成 これで、管理者はrails_adminの管理画面にアクセスできて、管理機能も使える状態になっています。 localhost:3000/admin など root pathの後に/adminをつけると管理画面に遷移できます。 ただ、毎回URLにベタ打ちするのがめんどくさいので、フッターにrails_adminの管理画面へのリンクを作成しておきます。 _footer.html.erb <footer> <!--ログインしてるユーザーが管理者の場合のみ--> <% if current_user.try(:admin?) %> <%= link_to '管理者ログイン', rails_admin_path %> <% end %> </footer> これで、このリンクを踏むだけで、管理画面へ遷移できるようになりました。 まとめ rails_adminとcancancanを使った管理者機能実装は5ステップ! gemのインストール rails_adminの設定 adminカラム追加 cancancanの設定 管理者画面へのリンクの作成 今回は、管理機能をrails_adminを使って実装しました。 gemを使うことで、時間が短縮できて他の機能へ注力できるので、開発期間が限られる場合や管理機能にそこまでのカスタマイズ性を求めない場合は、抜群の威力を発揮しますので、ぜひ導入してみてください。 また今回は、rails_adminの管理画面の日本語化までは解説していないので、また後日別記事あげさせて頂きます。 rails_admin管理画面の日本語化はこちらの記事で解説しています。 rails_admin管理者画面の日本語化 最後まで見ていただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む