Ruby関連のことを調べてみた2020年09月02日

Ruby関連のことを調べてみた2020年09月02日

【Rails】コメント機能(登録・表示・削除)

投稿に対するコメント機能実装の備忘録。

# ゴール
– Userテーブル、Postテーブルに紐付く、Comentテーブル(中間テーブル)でコメントを管理。
– Comentテーブルは、コメント内容、コメントしたpost_id、コメント投稿者user_idカラムを設置。
– (前提) ユーザー機能は、devise を使用。

# 実装
## コメントモデルとテーブル作成
– コメントモデルとテーブル(コメント内容、コメント投稿者)を作成

“`rb:ターミナル
% rails g model Comment comment_text:text user:references post:references
% rails g controller Comments
% rails db:migrate
“`
モデルにアソシエーション追加。

“`rb:Commentモデル
belongs_to :post # Comment.post で、コメントされた投稿取得
belongs_to :user # Comment.user で、コメント投稿者取得
“`

元記事を表示

railsのpathメソッドとurlメソッド

##pathメソッド
相対パス

“`
root_path => ‘/’
“`

##urlメソッド
絶対パス

“`
root_url => ‘http://www.example.com/’ ※完全なURLの文字列を返す
“`

元記事を表示

[rails devise]ログインしていないユーザーをログインページへ遷移する方法

前提 今回はitemsコントローラーでの操作にする。

“`
class ItemsController < ApplicationController before_action :move_to_signed_in, except: [:index] def index # トップページ生成 end private def move_to_signed_in unless user_signed_in? #サインインしていないユーザーはログインページが表示される redirect_to '/users/sign_in' end end ``` #before_actionの使い方 ``` before_action :move_to_signed_in, except: [:index] ``` before_action→コントローラで定義されたアクションが実行される前に、指定した共通の処理を行うことができるメソッドのこと。 except: [:index]→indexアクションは除く ・indexアクシ

元記事を表示

Pythonのデフォルト引数の挙動

Pythonのデフォルト引数はメソッド実行時ではなくプログラム起動時に評価される
これまで使っていたRubyやScalaでの挙動が普通だと思っていたので、何がおかしいのかわからずにかなりハマった

### Ruby

“`ruby
def test(t=Time.now)
puts(t)
end

test
sleep(10)
test
“`

実行結果

“`
2020-09-02 09:05:42 +0900
2020-09-02 09:05:52 +0900
“`

### Scala

“`scala
object Test {
def test(t: DateTime = DateTime.now()): Unit = {
println(t)
}

def run(): Unit = {
test()
Thread.sleep(10000)
test()
}
}
“`

“`
2020-09-02T09:14:08.681+09:00
2020-09-02T09:14:18.732+09:

元記事を表示

「実践Rustプログラミング入門」に入門する(3日目)

pp.190 – 192

# p.190 Webフレームワークのセットアップ

“`shell
PS work> cargo new todo
Created binary (application) `todo` package
PS work> cd todo
PS work/todo> cargo add actix-web actix-rt
Updating ‘https://github.com/rust-lang/crates.io-index’ index
remote: Enumerating objects: 1467, done.
remote: Counting objects: 100% (1467/1467), done.
remote: Compressing objects: 100% (129/129), done.
Rremote: Total 2037 (delta 1409), reused 1393 (delta 1336), pack-reused 570
Receiving objects: 100% (2037/203

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第1章】

##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

ではゴーゴー。 
##全体の流れ
第1章では、最初の「hello_app」を作成〜Gitを使ってバージョン管理〜本番環境にデプロイまで実施。
第2章では、scaffoldを使ってコードを自動生成し、「toy_app」を作成。
第3章から最後の14章まで、twitter風の「sample_app」をゼロから作成します。

チュートリアルとはいえ、前提となるプログラミング関連の知識が全くない状態では厳しいので、[Progate](https://prog-8.com/)の関連するコースはやっておこう(有料)。

[Railsチュートリアルと関連しているProgateのコース]
・第1章
 コマンドライン
 Git
・第4章
 Ruby
・第5章
 HTML & CSS
 Sass
・第14章
 jQuery
 JavaScript
 SQL
 Railsの基礎
 Ruby on Rails

元記事を表示

rails[createアクションによってデーター送信に失敗した時、エラー文を表示するときの手順]

1.エラー文を表示したいビューファイルに記述する。
今回はnew.html.erbに記述する。〇〇は自分で命名する。

“`
<%= render '〇〇/error_messages', model: f.object %>
“`
2.〇〇/_error_messages.html.erb
ファイルを作り記述する。

“`
#〇〇/_error_messages.html.erbの内容
<% if 変数A.errors.any? %>

    <% 変数A.errors.full_messages.each do |message| %>

  • <%= message %>
  • <% end %>

<% end %>
“`

3.もしデーターが保存できたら、同じコントローラー(今回はitemsコントローラー)のindexアクションに画面遷移して、保存できなかったらitems#n

元記事を表示

データベースに存在しないIDがURLに入力された場合の処理

データベースに登録されるデータにはプライマリキーのIDが付けられますが、そのデータを削除した場合はそのIDも存在しなくなります。
商品の詳細ページや会員の詳細ページのURLには`:id`があり、この数値を変更することでその数値のIDに該当する詳細ページが表示されますが、もし、存在しないIDが入力された場合には

“`
ActiveRecord::RecordNotFound
Couldn’t find モデル名 with ‘id’=入力された数値
“`

というエラーが発生します。

今回行う処理は「存在するIDなら表示し、存在しなければリダイレクトを行う」という物です。

## 環境
Ruby 2.5.7
Rails 5.2.4

## 処理の手順
今回はapplication_controllerにアクションを定義し、リダイレクトさせたい各コントローラーでそのアクションをbefor_actionとして設定する方法で進めていきます。
状況としては商品の詳細ページでURLに商品IDを入力した時の処理と仮定します。

“`ruby:application_controller.rb

元記事を表示

searchとeach_with_indexの組み合わせ

今日のドリルで登場した式。

“`Ruby
def search(target_num, input)

input.each_with_index do |num, index|
if num == target_num
puts “#{index + 1}番目にあります”
return
end
end
puts “その数は含まれていません”
end

input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
search(12, input)
“`
これで「4番目にあります」の出力ができる。

一方で、

“`Ruby
def search(target_num, input)

input.each_with_index do |num, index|
if num == target_num
puts “#{index + 1}番目にあります”
return
else
puts “その

元記事を表示

削除機能の実装(foreign_keyを持つ場合)

##概要
Railsで外部キーを持ったモデルを削除する際、単純にルーティングとコントローラーとビューファイルを記述しただけでは実装できず苦しんだのでアウトプットしておきます。

##実装内容
外部キーとして、商品購入に関してデータを結びつけているitem_purchaseを持ったitemというモデルを削除するとします。

このitem_purchaseは、購入した人であるuser_idと、購入された商品であるitem_idを持っています。

ここで、単純にitemを削除すると、item_purchaseにはitem_idだけなくなってしまったレコードが存在してしまいます。

そこで、itemを削除したときにその関連したitem_purchaseのレコードそのものを削除できるように記述していきます。

##実装

まずはモデルのアソシエーションに追加記述しましょう。

“`ruby:models/item.rb
has_one :item_purchase, foreign_key: :item_id, dependent: :destroy
“`

“`ruby:models/i

元記事を表示

【Ruby on Rails】gemのdeviseを使用し、名前とパスワードのみでログインする方法

# 目標
![画面収録 2020-09-01 22.17.23.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/4fedaa4a-1510-7a49-4675-22b845a7280d.gif)
# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina
# 前提
homesコントローラーを作成し、以下を記述済。

“`:config/routes.rb
root ‘homes#top’
get ‘mypage’, to: ‘homes#mypage’
“`
“`:app/controllers/homes_controller.rb
class HomesController < ApplicationController def top end def mypage end end ``` # 1,deviseをインストールする Gemfileの最後に、以下を追加。 ```:Gemfile gem 'devise'

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【はじめに】

著者の現ステータスはタイトルどおり。
自分の置かれている状況を再確認し、自分の目標を明確にするために、まずは自分語りから始めるよ!!!

##【前提】
・これはRailsチュートリアル(第4版)を進める際の個人的なアウトプットメモです。
・著者は全くの初学者です。タイトルから分かるとおり、現職は全く関係ない職種(IT・Webとは正反対と言っていいかも)で、大学等も全く関係ない学部を卒業しています。間違い・不適切な内容があってもご容赦ください。
・初学者といいつつ、[こちら](https://ryosukemizuta.com/rails_tutorial/#2)の記事を参考に、Progateは一通り学習し、本チュートリアルもすでに2周しています(教えに従い9~14章は2周目からチャレンジ)。でも、正直全然理解できていない…テスト書ける気しない……な状態です。
・3周目となる今回は、過去2周で理解できなかった部分を掘り下げていきながら、極力自分の手と頭を使って取り組んでいきます。IT・Web等の情報技術の用語にも疎いので、都度都度調べながら進めていきます。

##なぜRailsチュートリ

元記事を表示

Heroku上のRailsアプリにNewRelicを導入する

## 導入方法
### アドオンを追加
– HerokuのダッシュボードからNewRelicアドオンをProvision
– コマンドラインから行う場合は`$heroku addons:create newrelic:wayne`

この時点で`NewRelicアカウントの作成`、`各種環境変数のセット`が自動で行われています。

### 設定方法が記載されている画面に移動
– アドオン一覧画面からNewRelicをクリックし、NewRelicのサイトに移動
– コマンドラインから行う場合は`$ heroku addons:open newrelic`
– `Get Started`をクリック
![new_relic_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244893/c7d0ca08-2266-6d88-b7cb-4fb6bf4489a4.png)
– `Ruby`をクリック
![ 2020-09-01 20.38.40.png](https://qiita-image

元記事を表示

アスキーアートでfizzbuzzする。

今回、超絶技巧プログラミングという素晴らしい本を読んだのでアスキーアートでFizzBuzzをしてみました。
四角の中に0x6d61という文字を書いています。結構見づらい…

“`ruby
eval(%w(1.upto(100)do|n|s=n;if(n%15==0);s=”FizzBuzz
“;e lsi f(n% 5== 0);s=”Buz z”;els if(n% 3==0
); s=”F izz “; end ;puts(s);end ;;;; ;;;;;;;; ;;;;
;; ; ; ;;;; ;;;;; ;;;;; ;;;; ;;;;; ;;;;
;; ;;;; ;; ;; ;;;; ;;; ;;; ;;;; ;;;; ;;; ;;;;; ;;;;
;;; ;;; ;;;; ;;;; ;;;;;; ;;;;;; ;;;;;; ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)*””)
“`
#解説

簡単にコードを解説していきます。まず“`%w“`部分でfiz

元記事を表示

【Rails】フォーム内で、異なるモデルのデータを送信したい

1:1の関係のモデル同士を関連づけ、フォームにそれぞれのモデルデータを同時に送信できるようにしたい。
つまり、formメソッド内で、2つのデータモデルを扱えるようにするのが今回の目的になります。

今回は、UserモデルとUser_profileモデルを1:1の関係性にして、formメソッド内でどちらのユーザー情報も同時に編集できるようにします。

#M

“`ruby:マイグレーションファイル
class CreateUserProfiles < ActiveRecord::Migration[6.0] def change create_table :user_profile do |t| t.string :twitter_url t.string :program_lang t.string :image t.references :user, foreign_key: true t.timestamps end end end ``` `t.references :user, foreig

元記事を表示

Capistrano + AWS(EC2) + Rails で簡単デプロイ

# はじめに
Capistranoを使って、自作しているRailsアプリをデプロイしてみました。

基本的には以下の記事を参考にしました。
[(Capistrano編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/657aca7531b8948d267b)

本記事では、参考記事に沿ってエラーで詰まった部分をまとめたので参考になれば嬉しいです。

# 作成するファイル
ローカル側
– Gemfile
– Capfile
– config/deploy.rb
– config/deploy/production.rb
– lib/capistrano/tasks/unicorn.rake
– config/unicorn/production.rb

サーバー側(EC2)
– shared/config/settings.yml
– shared/config/database.yml
– shared/.env
– /etc/nginx/conf.d/app.conf

元記事を表示

コードを綺麗にする覚書 Ruby

# コードを綺麗に書くって難しい
 書いてる時は気づかないし、書き終わった後で眺めていて気付いたとしても、一旦考えて書いたコードを分解して再構築するのが難しい。再構築する際にコードの書き方に違ったアプローチが必要だからですね。一旦、こうだと思って書いたコードから頭を真っ白にして書き直すところが山場です。
 今回はそんな書き直した部分で気付いたところを幾つかパターン分けして書き出します。自分の経験による覚書です。

## ほとんど同じ処理が条件式の中に入ってる
実際、やりたい処理は同じだが、引数で渡ってくるparamの中身がon_totalとon_this_monthの2種類あり、その二つのどっちかを検知したら、ソートする処理を入れるってことをしたかったわけですね。最初に書いたのは、下記。

“`bad_1.rb
def self.ascend_checkins(param, hash)
if param == “on_total”
hash.sort_by { |k,v| -v[“total”] }.to_h
elsif param == “on_this_month

元記事を表示

jQueryが導入できないRuby on rails バージョン6.0.0の人に告ぐ、、瞬速jQuery導入法

ども、

今回はAjaxが導入できない人や、
ドロワーなどを実装しようとして記事丸コピしたが、
何故かできない人に向け、

基本に立ち返り、jQuery ほんんんとに導入できているか問題を解消スべく
この記事を書かせてもらいたいと思います。

この番組は

“`
ruby ‘2.6.5’

# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 6.0.0’
# Use mysql as the database for Active Record
gem ‘mysql2’, ‘>= 0.4.4’
# Use Puma as the app server
gem ‘puma’, ‘~> 3.11’
# Use SCSS for stylesheets
gem ‘sass-rails’, ‘~> 5’
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacke

元記事を表示

めちゃ手こずったAjax いいね機能作成、、メモ書きとして。Ruby on rails6.0.0

どうもこんにちは、

今回は、僕がとても手こずった機能である

いいね機能

について紹介します?

いろんな記事を参考に進めたのですが、
なかなかうまく行かなかったので、記録として残しておき、
後世に語り継ぎたいと思います。(大げさ)

では早速やっていきましょう!

この記事は以下の情報を参考にして執筆しました。

– [【Rails×Ajax】いいね機能ハンズオン](https://qiita.com/naberina/items/c6b5c8d7756cb882fb20)
– [【Rails】ブックマーク機能のajax化](https://qiita.com/hiro266/items/ef860435021faa3f96b5)

まず

“`
% rails g model Favorite user_id:integer book_id:integer

“`
マイグレーションファイルに記述します

“`favorite.rb
class CreateFavorites < ActiveRecord::Migration[6.0

元記事を表示

CircleCIでSystemSpec(RSpec)とRubocopを走らせる

#はじめに
CircleCIを使ってSystemSpec(RSpec)とRubocopを走らせてみました。

基礎的な学習から実際に使ったソースコードをまとめたので参考になれば幸いです。

#基礎学習

教材:
[入門ガイド – CircleCI](https://circleci.com/docs/ja/2.0/getting-started/)
[いまさらだけどCircleCIに入門したので分かりやすくまとめてみた](https://qiita.com/gold-kou/items/4c7e62434af455e977c2)

基本的な使い方を知るために公式で用意されている[入門ガイド – CircleCI](https://circleci.com/docs/ja/2.0/getting-started/)をやりました。
手を動かしながら学習できて、30分ぐらいで終わるのでおすすめです。

次に、[いまさらだけどCircleCIに入門したので分かりやすくまとめてみた](https://qiita.com/gold-kou/items/4c7e62434af455e977c2)を読

元記事を表示

OTHERカテゴリの最新記事