【Rails6, haml】クラス名にindexをつける方法【each_with_indexまたはeach.with_index】
#やりたいこと
eachメソッドで並べるデータそれぞれのクラス名に番号を付けたい。
具体的には
user_name_1
user_name_2
user_name_3
のような感じ。
#開発環境
ruby 2.6.5
rails 6.0.0
#コード例
“`haml:hogehoge.html.haml
– @products.each.with_index do |product, index|
%tr.results__table-row
%td.results__table-row__name
= product.standard_name
%td{class: “results__table-row__price_#{++index}”}
= (product.price).to_s(:delimited)
“`
この部分ですね。
“`haml
%td{class: “results__table-row__price_#{++index}”}
“`
普通、hamlだとクラス名は`.hogehog
#マイグレーションの削除まで
チーム開発をしていた時に調べて残していたのでついでにQiitaにも残しておきます。
ちなみにロールバックは使いません。
##まず今のマイグレーションファイルの状態を確認する
これめっちゃ大事です。これを確認しないと削除するファイルがどれか、削除できる状態かなどがわかりません。(どっかにあるかも)
“`
bundle exec rake db:migrate:status
“`
これを打ち込んだら確認できます。
その結果が↓
これからこの一番したの20200409150025_create_as.rbを使って削除していきます。
###ステータスの確認
一番左のステータスがマイグレーションファイルを削除できるかわかる目印なんでここをまず見ましょう。
今upとなっている
# 今日の目標
爆速でtag機能を搭載したミニアプリを制作してみる
まずは基本機能のみのアプリを作り 追加実装を意識した作りをする
## 環境
Ruby 2.5.1
Rails 5.2.4
docker 19.03.8
##今回はdockerで環境構築します。
dockerなんて 訳わからんと言う人はdockerの構築部分は読み飛ばしてください
## githubでリポジトリも作成します
githubなんて知らんわ って人も読み飛ばしてください
## 実装内容
タスク作成時・更新時に、事前に作成したラベルを複数付けられるようにする。
タスクに関連付けられているラベルを表示できるようにする。
タスクをラベルで絞り込みできるようにする。
## dcocker構築
[docker公式](http://docs.docker.jp/)
##
まずディレクトリを作成
“`
$ mkdir todo-tag-app
$ cd todo-tag-app
“`
githubで新しいレポジトリを作成
[![Image from Gyazo](https://i.gyaz
Rails
Docker
docker-compose
## はじめに
作成した個人アプリのテストを行っていた際にエラーが出てテストに失敗しました。
調べて解決出来たので、備忘のために残しておこうと思います。
### エラー内容
—
Userモデルのバリデーションのテストをしていたら以下のエラーが発生し、テストに失敗しました。
“`
translation missing: ja.activerecord.errors.models.user.attributes.nickname.blank
“`
調べたところ、エラー内容としてはdeviseを日本語訳したファイルがないというエラーのよう。
(gem deviseを使ってユーザー管理機能を実装)
### エラー原因
—
自作アプリで、ページネーションを日本語表示にするために
config>application.rb に ”config.i18n.default_locale = :ja”と
日本語化する設定をしていたのですが、deviseのエラーメッセージに関しては日本語化していませんでした。
そのため、deviseの日本語のファイルがないよとエラーになってしまった
ポートフォリオを作成する際に、何から始めれば良いかわからない・・・という方に向けて。
第1歩目として設計図を作成する事を強くオススメします。理由は以下の通りです。
>
・自分が今どの部分を実装しているか把握が容易になるため、迷子にならない![スクリーンショット 2020-04-09 23.08.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553621/f5011286-f054-51fa-7f89-fd66f9bfa52c.png)
・少しずつ目標に近く感覚を可視化でき、モチベーションの維持に繋がる
>
そのためにどのようなツールを使用し、どのような物を作成すれば良いかまとめました。
#●使用ツール
こちらはCacooというサービスをオススメします。
https://cacoo.com/
会員登録から一定期間は無料ですので、無料期間中にさくっと作ってしまいましょう。
またPDF出力が可能なので、作成した設計図をPDFとして保存してしまえば無料期間中だけでも事足ります!
#●作成すべき物
#deviseで新規登録したけどroot_path以外のページに飛ばしたい…
今までdevise使ってきたけど新規登録やログインをするとroot_pathのページに勝手に戻ってログインしている状態になってたんですが(いやー便利)、サイト作っている途中にroot_path以外のページに飛ばしたことになりまして調べてみました。
##コントローラーに記述して飛ばす
root_path以外のページ遷移は多分コントローラに書かないと出来ないかも
調べてたらapplication_controller.rbにまとめて書く方やそれぞれの動作に合わせてregistrations_controller.rbやsessions_controller.rbに書く方がいましたが今回はapplication_controller.rbにまとめて書きました。
###その前にrails routesで飛ばしたいpathを確認
Rails メール自動配信機能をActionMailerとwheneverを使用して実装する
Railsで毎日メールを送るためのバッチ処理を、`ActionMailer`とgemの`whenever`を使用して実装しました。
##手順
1. gem `’whenever’`導入
1. `schedule.rb`にバッチ処理を記述
2. `schedule.rb`の内容を登録
1. メールを送信するメソッドを定義
2. viewに送信するメール本文を作成
3. logファイルを確認して実行されているか確認
##環境
ruby ‘2.5.7’
gem ‘rails’, ‘~> 5.2.4’, ‘>= 5.2.4.1’
##前提
1. Userテーブルにemailカラムがあること
1. `ActionMailer`で送信するサーバーの設定が出来ていること
2. メール送信するために必要な`ApplicationMailer`を継承するクラスを作成していること
※ (`UserMailer`という名前で作成済)
## 1. gem `’whenever’`導入
`’whenever’`って?
自動的にメール送信するなど、バッチ処理を行うためにはcronというものを使ってc
Ruby
Rails
ActionMailer
whenever
バッチ処理
# 背景
とあるサービスをrailsで作っていたが、初期データが多くてseedにすべて書くのは大変&エンジニア以外にも手伝ってもらいたかったので、csvファイルでseedデータを作ることにしました。
csvファイルをseed.rbで読み込む方法はすでに存在しますが、csvファイル1つずつ読み込んだり、一括で読み込むものもvalidationを無視するものが多いです。かといって、validationを守りつつcsvファイルを読み込むためには、読み込む順番を制御しなければなりません。
コードを書いてると60行ぐらいになり、rubyのメタプログラミング的手法(カッコイイ)も使ったので、練習も兼ねてgem化することにしました。
# 成果物
https://github.com/aitaro/csv_seeder
(よかったら使ってね)
# 他のcsv読み込み系qiita
無限にあったので[検索結果](https://www.google.com/search?q=rails+seed+csv+qiita)から探してください。
# 準備
[RubyGemsの作り方](https://qii
Railsのscopeのソースコードを読んでいきます。
“`
u = User.new(name: ‘sample name’)
“`
scopeを読んでいくために、上記のようなオブジェクトをサンプルとして作成します。
“`ruby
1: class User < ApplicationRecord
2:
3: binding.pry
=> 4: scope :recent, -> { order(id: :desc).limit(5) }
5: end
“`
中を読んでいきます。
“`ruby
165: # We are able to call the methods like this:
166: #
167: # Article.published.featured.latest_article
168: # Article.featured.titles
169: def scope(na
##モデル
人の年齢を表すカラムに「歳」を加えたり、重さを表すカラムに「キログラム」を加えるメソッドは、ビューでのみ使用される見た目を整えるロジックです。このような見た目に関わるロジックは、ヘルパーかデコレーターに記述します。
“`
# ☓:ビューでしか使用しないメソッドをモデルに定義している
# 例) Userモデルにcreated_atを年, 月, 日の形に変換するメソッドを定義している
class User < ApplicationRecord
def adjust_created_at
created_at.to_date.strftime("%Y年%m月%d日")
end
end
# ◯:ヘルパーファイルにビューで使用するロジックを定義している
module ApplicationHelper
def set_created_at(created_at)
created_at.to_date.strftime("%Y年%m月%d日")
end
end
# ◎:ビューで使用するロジックのうち、表示フォーマットを整えるものを、Drap
#はじめに
Windows10でRailsの環境構築をしたところ、`rails server`コマンドを実行したときにページをうまく表示できなかったので、WSLを用いることにしたときの備忘録です。
#環境
– Windows10(64bit)
– Surface Pro 4
– Ruby 2.6.5
#Windows10での環境構築(失敗)
結局解決せずに諦めたので、興味がない方は読み飛ばしてください。
まず gem 経由で Rails をインストールします。
“`
$ gem install rails -v 5.0.7.2
“`
Rails プロジェクト用のディレクトリを作成し、そのディレクトリに移動してプロジェクト`new-app`を作成します。
“`
$ mkdir workspace
$ cd workspace
$ rails new new-app
“`
`new-app`ディレクトリに移動して`rails server`を実行したところ、次のエラーが発生しました。
“`
cannot load such file — sqlite3/sqli
Ruby
Rails
WindowsSubsystemForLinux
WSL
#はじめに
今回は[前準備編](https://qiita.com/bArUsan1Gou/items/28c60172bb840299cea7)、[設計編](https://qiita.com/bArUsan1Gou/items/a8e86bd31a1e141be47e)の続きです。そちらに筆者のスキルレベルやこの記事の目的などが書いてありますので、先にお読みください。
#実装にあたって
ここから実装に入っていくわけですが、稚拙な設計となっている為、かなりの回数の手戻り作業が発生することが見込まれます。その辺りもうまくいかなかった理由と改善策をまとめつつまとめていきたいと思います。
そして、実装にあたり個人的にまとめておきたいと思った昨日の追加などは別途記事にしてまとめていきたいと思います。(その方があとで見返すのとかも楽だし、、、)
そして差し当たり、
・ユーザー管理機能
・投稿機能
・投稿一覧、投稿詳細機能
・画像ファイルアップロード機能
・ページネーション機能or無限スクロール機能
・DBテーブルのリレーション管理
・単体、統合テスト
この辺のrailstu
Ruby
Rails
AWS
初心者
cloud9
##はじめに
今まではあまり気にしてこなかったのですが、そろそろ $ rails server したときに表示されるpumaについて知っていた方がいいなと思い調べたのでまとめておきます。
筆者は初学者なので間違いがあれば優しく教えていただけると幸いです。
##Pumaとは何か
Pumaとは、webサーバとしての機能もあるアプリケーションサーバです。
と言われて、自分は何言ってるのか分からなかったので1から説明します。
###・webサーバとは
ユーザーからのリクエストを必要に応じてアプリケーションサーバに渡すプログラムです。
有名なものではNginx(エンジンエックス)などがあります。
###・アプリケーションサーバとは
webサーバからのリクエストをrailsアプリケーションに渡す橋渡し的な存在です。
例えばユーザーがなんらかのリクエストをwebページに送ったとします。このリクエストは
#####webサーバ → アプリケーションサーバ(Pumaなど) → Rack → Railsのrouter → controller
という風に受け渡されて、アプリケーションで処理が行われま
Rails入門5: deviseのユーザー情報を利用しよう
———————————————————————————-
#01:掲示板でユーザー情報を使おう
このレッスンでは、Scaffoldで作成した1行掲示板に、deviseを使ってユーザー認証機能を追加します。まずは、どのような機能を作るのか整理しましょう。
このレッスンで作る掲示板
– deviseで作成したユーザー認証に、1行掲示板を組み合わせる
– ログインしている時だけ投稿できる
– 投稿者名をdeviseのユーザー名にする
– 自分の投稿だけ、編集・削除できる
作成手順
– ログイン時だけ投稿できる掲示板を作る
– 1行掲示板の記事に、Emailを表示する
– Userモデルに、nameカラムを追加する
– Userモデルに、ユーザー名を保存する
– 投稿時にログインユーザー名を保存
– 自分の記事だけを編集・削除
参考になるWebページ
– [ASCII.jp:ユーザー認証でなにができる
Rails入門4: deviseでユーザー認証してみよう
#01:ユーザー認証機能を理解しよう
このレッスンでは、Railsのユーザー認証用ライブラリdeviseを使って、Webアプリケーションで必要になるユーザー認証の基本を学習します。
まず初めに、ユーザー認証の概要と、deviseの役割を理解しましょう。
ユーザー認証とは
相手を確認してアクセスを許可する仕組みを「ユーザー認証」と呼びます。
ユーザー認証
– 認証:Authentication 本人かどうか確認する
– 許可:Authorization 認証の結果をあたえ、利用許可
deviseの主な機能
deviseは、ユーザー認証の仕組みをRailsに提供するライブラリです。
– サインアップ:ユーザー情報と暗号化したパスワードをデータベースに保存
– メールによるユーザー確認
– ログイン:メールとパスワードによる認証
– クッキーによるセッション管理
– ユーザー追跡:ログイン回数、日時、IPアドレスなど
– パスワードリセット
– ユーザーのロック
– OmniAuth対応:TwitterやFa
Rails入門3: Railsサービスを機能アップしてみよう
#01:RailsにBootstrapを導入しよう
このレッスンでは、お勧めのお店を投稿できる「ランチマップ」アプリのデザインを整えて、スマートフォン対応と日本語表示を実現します。
まず初めに、HTMLテンプレートのBootstrapを導入します。
RailsのWebページにアクセスするには
– paizaの場合: New Broweserタブに表示されたアドレスに「:3000」を追加する
例 https://xxx.paiza-app.cloud:3000
– 作成した掲示板にアクセスする:https://xxx.paiza-app.cloud:3000/categories
– 自分のPCでrailsを起動する場合: ブラウザで「http://localhost:3000」にアクセスする
※ xxxには、コンテナ名が入ります
RailsのWebサーバーを停止するには
「CTRL」キー(コントロールキー)を押しながら「C」のキーを押します
RailsにBootstrapを導入する
Gemfileを修
Rails入門2: 実用的なRailsサービスを作ろう
#01:プロジェクトとウェルカムページを作ろう
このレッスンでは、お勧めのお店を投稿できる「ランチマップ」アプリをRuby on Railsで作ってみましょう。まず初めに、プロジェクトとウェルカムページを作ります。
今回使ったLinuxコマンド
現在のディレクトリ(フォルダ)の位置を確認する。
$ pwd
ファイルやディレクトリの情報を表示する。
$ ls
lunchmapディレクトリに移動する。
$ cd lunchmap
今回使ったRailsコマンド
lunchmapプロジェクトを作成する。
$ rails new lunchmap
Rails用のWebサーバーを起動する
$ rails s -b 0.0.0.0
ウェルカムページを生成する
rails generate controller welcome index
ウェルカムページを修正する
app/views/welcome/index.html.erb
Lunch Map
Tasty meal on your pla
## この記事を書くにいたるまで
現在Rails6.0とNuxt.jsを使って適当にアプリを作っています。(Nuxtの練習です
RailsはAPIモード、認証には`devise_token_auth`を使用しており、
Nuxtからaxios経由でpostしてtoken認証を行うアプリになっています。
今回loginをaxiosで行ったのですが、そのresponse(`response.headers`)の中に
`access-token`や`client`などが格納されていないというトラブルが発生しました。
解決すると「こんなことで…」と思いますが、ほぼ1日ハマってしまったので共有です。
## ぶつかった壁
まずnuxt側ですが、以下のようにloginアクションを実装しています。
“`javascript:login.vue
async login(vuexContext, data) {
await this.$axios.post(“/api/v1/auth/sign_in”, data)
.then(response => {
c
Rails
Vue.js
Vuex
nuxt.js
#コントローラーとモデルの削除ってどうするの?
Railsでコントローラーを作ったのはいいけど消す時は?ってなったのでこの機会にいつもお世話になっているQiitaの先人様たちと同様に投稿していこうと思う。初投稿だからダメな所あっても優しくしてクレメンスb
##コントローラー、モデルの作成
まぁコントローラー、モデルを作るのはみんな知っていると思うけど知らない人も見るかもしれないので簡単に
“`
rails g controller コントローラー名
“`
“`
rails g model モデル名
“`
では消す時は?
##コントローラー、モデルの削除
ここからが本題であまり消すことのなかったコントローラーを初めて消したいと思って調べました。
で、一番上に出てきたサイトを参考にやってみました。
参考サイト→[リンク](https://yuu.1000quu.com/delete_the_model_and_controller_in_rails)
“`
rails destroy controller コントローラー名
“`
はい、destroyです。
ただこ