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

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

備忘録(CSRFについて)

Railsには、悪意のある攻撃に対してセキュリティを高める仕組みが様々用意されています。

CSRFと呼ばれるサイトの成りすましによるクラッキングに対して、どのような対策が取られているか述べてください。

A
 ApplicationControllerにデフォルトで

1
protect_from_forgery with: :exception
という記述がされている。これにより、アプリで作られたフォームに対してトークンが発行され、正しいフォームからの通信なのかを判別することができる。

・protect_from_forgery について述べられている
・トークンの発行によりクラッキングを防いでいることが述べられている

元記事を表示

Rails ~コメント編集ページの作成~

#概要
Railsによるコメント編集ページの作成、実装についてまとめる。

#ユーザー編集ページの作成
###まずは見た目を作る。

##controller
“`
def edit
@user=User.find_by(id:params[:id])
end
“`
コントローラでは変数@userを定義。find_byメソッドで選択したidを代入するように設定する。

##routes
“`
get “user/:id/edit”=>”user#edit”
“`
左はリンク先、右は飛ぶアクション先を表す。

##view
“`

アカウント編集

ユーザー名

元記事を表示

Rspecに関するメモ書き

※適宜更新

Headless Chromeを使って試験をしたい場合はこれをかく。
もちろんGemは入れないといけないのでGemfileには必要なGemが入っていることが前提。

“`spec-helper.rb
/require/‘capybara/rspec’
RSpec.configure do |config|
config./before/(:each, type: :system) do
driven_by :selenium_clome_headless
end
“`

元記事を表示

Qiita風 ブログアプリ作ってみよう ver- 2

## Modelの作成
“`
$ rails g model blog
“`
“`

invoke active_record
create db/migrate/20200311152022_create_blogs.rb
create app/models/blog.rb
invoke test_unit
create test/models/blog_test.rb
create test/fixtures/blogs.yml
“`

上記のコマンドを実行すると 『app/models/blog.rb』が作成される。

## テーブルの作成
### マイグレーションファイルを編集する
“`ruby

class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs do |t| t.string :name # 追加 t.str

元記事を表示

Qiita風 ブログアプリ作ってみよう ver- 1

# Qiita風 ブログアプリ制作

qiita-square

## 環境
– ruby 2.5.1
– rails 5.2.3
– mysql2 0.5.3

### terminal
“`
$ cd ~/ 保存したいdirectory
$ rails _5.2.3_ new qiita.blog -d mysql
$ cd qiita.blog
$ pwd
“`

スクリーンショット 2020-03-11 23.55.04.png

上記の写真のよう

元記事を表示

Rubyのattr_accessorについて

Rubyの「attr_accessor」について備忘録として投稿させていただきます。

#attr_accessorについて
インスタンス変数にアクセス、変更が可能になります。
下のコードは料金を計算する例です。

“`ruby
class Test
attr_accessor :cost, :tax
def initialize
@cost, @tax = 0,0
end

def cost_total
@cost += 20
end

def total
@cost * @tax
end
end
test = Test.new
test.cost_total
=> 20
test.tax = 0.10
=> 0.1
test.cost_total
=> 20
“`
上のコードのように、costとtaxをアクセスと変更を可能にします。
そうする事によってtaxなどを自由な値に変更して、
料金の計算を行うことも可能です。
改めて非常に便利な機能だと感じました。

元記事を表示

就活用ポートフォリオ紹介「俺のラーメン」 〜制作日数・反省点など〜

#はじめに

こんにちは!
しばた[(@shibata0406)](https://twitter.com/shibata0406)と申します!
地元の食品メーカーにて営業をやっておりましたが、現在はYouTube活動をしながら転職活動中!
興味のある方はぜひ見ていってください〜
→[YouTubeチャンネル「ポントイズ」](http://www.youtube.com/c/ポントイズPonToys)

今回は、ポートフォリオとして作成した「ラーメンサイト」をご紹介いたします。

#ポートフォリオ「俺のラーメン」
スクリーンショット 2020-03-11 20.35.35.png
ラーメン好きの(僕の)ラーメン好きによる(僕による)ラーメン好きの為の(僕のための)ラーメンサイトです。

URL : htt

元記事を表示

【Rails】本番環境におけるアセットプリコンパイルの設定

自分用メモです。
本番環境を整えた後のアセットプリコンパイルの設定について。

### 環境

ruby 2.6.4
Rails 5.2.4.1
puma 3.12.4
nginx 1.12.2

## エラーログ

本番環境でルートにアクセスしたらエラーが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322882/dc50f901-0de0-97f0-01e1-fe44ddeface6.png)
エラーログはこんな感じです。(読みやすいように整形済)

“`test_app/log/production.log
INFO — : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] Started GET “/” for 119.245.128.225 at 2020-03-09 02:40:39 +0000
INFO — : [e53342b0-17fc-4146-a4d1-6d64dc3007cd] Processing by Pos

元記事を表示

if文練習

## if文を使いこなそう!
問題
あなたは警官です。aとb二人の容疑者の取り調べをしています。
どちらも証言がTrue、またはFalseであればその証言はTrueです。
しかしどちらかがFalseでTrueであればその証言はFalse、と出力するメソッドを定義しなさい。

呼び出しは以下のように行う
police_trouble(a, b)


police_trouble(true, false) → False
police_trouble(false, false) → True
police_trouble(true, true) → True

上記のような問題があったとしましょう。このようなif文はどのように実装すれば良いでしょうか。
私は最初下記のようなメソッドを実装しました。

“`ruby
def police_trouble(a, b)
if (a == true) && (b == true)
puts “True”
elsif (a == false) && (b == false)
puts “True”
else

元記事を表示

if文練習

## 条件分岐を使いこなそう
問題
平日でないまたは休日の場合は「True」と返信し、
休日ではない場合は「False」と条件分岐させるメソッドを実装しなさい。

メソッドの呼び出しは
today_is_vacation(weekend, vacation)

このような問題があったとする。一見何を言っているのかわからないと思うので例を
引数が
(false, false)なら False(休日出勤)
(true, false)なら False(平日)
(false, True)なら True(休日)
(True, True)なら True(平日休み)
を判別すると言うことである。
これを実装するにはどのようなif文で条件分岐をすれば良いのでしょうか。4通りの引数の渡し方があって一見複雑そうですよね?
しかし、よく考えてみてください。
問題文としては休日ならTrue、違うならFalseを出すだけなので、実は条件分岐はシンプルです。

“`ruby
def sleep_in(weekday, vacation)
if vacation == false
puts “Fals

元記事を表示

rbenvのrubyコマンドがすべて「invalid option -: (-h will show valid options) (RuntimeError)」それRUBYOPTが原因かも

# はじめに
– Rubymin+rbenv+ruby2.7の環境で使っていた
– ruby2.6.3にスイッチして作業しようとしたらRubymineで **「No Rails found in SDK」** エラーがでるようになった
– Rubymineの設定を探っていたが、`ruby -v` が失敗していることに気付く
– 別のバージョンなら? `2.6.5`, `2.5.7`をインストールしたがすべてNG
– `2.7.0`に戻すと正常に動作する

# エラー内容

“`console
$ ruby -v
Traceback (most recent call last):
/Users/ueki/.rbenv/versions/2.6.4/bin/ruby: invalid option -: (-h will show valid options) (RuntimeError)
“`

# 結論

– `.bashrc`に書いている`RUBYOPT`を削除しよう
– [Switching back to ruby 2\.6 after installing / usi

元記事を表示

scopeを使いまわしたい

# scopeを使いまわしたい

複数のモデルに対して同じスコープを使いたい…しかし一々コピペして同じスコープを定義するのは嫌だったので調べてみたところ、スコープ用のモジュールを切り出すのが良いらしい

## 実現したいこと

“`ruby:こんな動きがしたい.rb
scope :recent, -> { order(created_at: :desc) }
“`

こんなスコープを複数のモデルで使いまわしたい

## 結論

“`ruby:app/models/concerns/common_scope.rb
module CommonScope
extend ActiveSupport::Concern
included do
scope :recent, -> { order(created_at: :desc) }
end
end
“`
このモジュールをモデル側でincludeしてやると使えるようになる

`ActiveSupport::Concern`をextendし、includedブロック内に記述することでscopeをクラスメソッドとして使え

元記事を表示

【Ruby/Rails】シンボルとキーワード引数について学んだ話

プログラミング歴1年目でキーワード引数という言葉を知り、
いろいろ学べたのでまとめてみました!(ついでにシンボルについても!)

駄文ですが読んでいただけると嬉しいです~?

## シンボルについて

### シンボルとは?

めっちゃざっくり言うと『文字列のような見た目をした数値』。
コード上は文字列で見えてるけど、Rubyの内部では数値として扱われるオブジェクト。

シンボルの実態は数値なので、処理速度が文字列よりも早い。

### メモメモ
クラス名・メソッド名・変数名・定数名を定義したときに実は勝手にシンボルも生成されている。

“`ruby:例

# シンボルの確認方法

class Hoge # クラスの定義
end

num = 5 # 変数の定義

p Symbol.all_symbols # 定義済みの全てのシンボルオブジェクトの配列を返す

#=> [:!, :”\””, :”#”, :”$”, :%, :&, :”‘”,… :Hoge, :num,…]
# すでに定義されているシンボルのあるので、めっちゃいっぱいでてくる
“`

[シンボルについてのおすすめ

元記事を表示

[Ruby]使えるようにしておくと便利な記法

### はじめに
ずっとC言語使ってきたせいか、書き方もついついC言語で出来る書き方に寄ってきてしまう。
さすがに慣れてはきたものの、たまに忘れてしまうため備忘録として残しておく。

Rubyをちょっと勉強していれば知っていて当たり前のものではあるが。。。

### ||=
一般的には`nilガード`と呼ばれているもの。

“`:nilガードの例
def users
@users ||= []
end
“`
“`:nilガードを使わなかった場合
def users
@users || (@users = [])
end
“`
※上記のようなゲッターメソッドの書き方は良く使われるらしい。

### &.
正式名称は`Safe navigation operator`、通称`ぼっち演算子`とのこと。
レシーバの後に付けることで、レシーバがnilの場合でもエラーを吐かずにnilを返す。

RailsではActiveSupportに`try!`という似たメソッドがあるため、あまり使われないかも。
ただし、速度的にはこちらの方が有利

“`:&

元記事を表示

ActiveRecordで使っているDBの接続情報を調べる

## 手順

1. サーバーが動いていることを確認する
2. `rails c`をする
3. irbの中で下記のActiveRecord〜を入力する

“`sh
irb(main):001:0> ActiveRecord::ConnectionHandling.connection_config
# => {:pool=>5, :timeout=>5000, :database=>”db/development.sqlite3″, :adapter=>”sqlite3″}
“`

## 参考リンク

https://apidock.com/rails/ActiveRecord/Base/connection_config/class

元記事を表示

Rails ~ユーザー機能の実装~

#概要 
Railsを使用したユーザー機能の準備、実装を忘れないようにメモしておく。
#モデルとテーブルの作成
Userモデルとusersテーブルを作るためターミナルへコマンドを実行する。今回はnameとemailの2つのデータをもたせる。
「カラム名:データ型」の部分は図のように複数並べることが可能。
stringとは短い文字列のこと。ユーザー名やメールアドレスといった短い文字列のデータに用いる。
“`rails g model User name:string email:string
rails db:migrate“`
とターミナルへ入力。モデルをジェネレートしますよー。
Userって名前ね。string型のnameってカラムとemailってカラムをください。
データベースに変更を反映させてねーって意味になる。
#dateの保存について
テーブルにデータを保存させるには
① newメソッドでUserモデルのインスタンスを作成
② saveメソッドでuserテーブルに保存
この2つの処理が必要

#バリデーション
“`
validates:email,{uniquenes

元記事を表示

CSS、SCSSファイルの読み込み

## CSSファイルの読み込み
rails newによってアプリケーションを作成した際にはapplication.cssに

“`ruby
*= require_tree .
“`
の記述がある。この記述によって同じディレクトリにあるcssファイルは読み込まれる。
またこのrequireはアセットパイプラインの仕組みによってファイルを読み込む。
アセットパイプラインはcssファイルやjavascriptファイルを一つにまとめて圧縮し処理速度をあげる仕組み。
アセットパイプラインはsprocketsと言うgemによって実装されている。

## SCSSファイルの読み込み
scssファイルはapplication.scssに@importを記述することでscssファイルをインポートする。
この@importはscssのメソッドであり拡張子をscss(application.scss)にしないと使えない。
application.scssからscssファイルをインポートするために使用するメソッドである。

元記事を表示

アプリケーションを作ってみます

自分用メモ

new コマンド実行
rails _5.0.7.2_ new Put.Memo -d mysql
データベースを作成
rails db:create

作るのは単語帳アプリ
最初にデータベース設計をしてみて自分のしてみたいことを整理してみた
機能として
—アカウント機能
—投稿機能
—いいね機能
—検索機能
—意味の部分にurl,画像を描けるようにする
—ランキング機能

![82486AC1-7B32-4DAC-8A93-1D76A94AED99_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600111/d3d9a033-54ac-3948-16df-67a0c3da17d4.jpeg)

次にフロント実装

topページには
:スクロール機能
:ランキング機能

↑とりあえずこれだけ実装したい
できればタグごとのランキング,ページネーション機能をつけたい

ビューはこんな感じ
単語、意味とurlと画像
で一つの投稿としてこれをランキングで

元記事を表示

can’t find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)が起きた時に試したこと

#can’t find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)が起きた時に試したこと

rspec勉強のためにgit cloneしてテストコードを書いていこうと思った矢先に上記のエラー文を吐き出しbundle updateができなくて、ちょっと詰まったので同じところで躓かないようにするためにメモしておく。

##原因
Gemfile.lockで記述されているbundleのバージョンと実際にインストールされているバージョンが違ったため上記のエラーが発生していた。

##問題解決のために行ったこと
1.Gemfile.lockのbundleのバージョンを確認
 ⇨cd [railsのプロジェクト] で対象のrailsプロジェクトに移動する
 ⇨vi Gemfile.lockとターミナルに記述する

“`
BUNDLED WITH
1.14.6
“`
⇨上記のような記述があるためこのバージョンにあったbundleをインストールしなければならない

2.既存のbundleをアンイ

元記事を表示

prefixを正確に調べた

#prefixの認識レベル
ミニブログを作っている最中、ふとprefixについて考えた時に
「パスを代入する変数」というレベルでしか認識していなかったので
詳しく理解するために調べてみた。

#【詳しく調べたかったポイント】

①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)
②普通にパスを記入する事との使い分け

#調べてわかった事

###まず第一に、prefixはRailsが推奨している記述方法らしい。
“`
tweet_path
“`
でパスの指定完成。

####①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)について
→結論あまりないらしい。
 1,Railsが推奨している
 2,シンプルで直感的に分かりやすくなる(?)

というのが使用している理由らしい。

####②普通にパスを記入する事との使い分け
→開発現場による。「こんな時はprefix!!」みたいなのはないっぽい。

#結論

####僕は普通にパスを書く方が好き。

「私はprefix派!」「prefixにはこんなメリットがあるぞ!」
とい

元記事を表示

OTHERカテゴリの最新記事