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

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

複数のモデルが絡んだ検索条件の作り方

今回は、 itemsテーブルに保存された商品名(name)と商品説明(description)
と一緒に、tagsテーブルに保存されたタグ名(tag _name)の値の中からキーワード
検索ができる機能の実装を作成したい。
(itemsテーブルとtagsテーブルは多対多の関係で中間テーブルを用いてアソシエーションを組んでいる。)

1 itemモデルに自作のメソッドを作り、それぞれのテーブルからの検索条件を定義し変数に代入(@itemsと@tags)
2 空の配列を作成し変数に代入(@test)
3 タグテーブルで検索条件に引っかかったデータのidとアソシエーションで結びついている商品をeachメソッドにかけて一つ一つ取得し、配列に追加(@test <<@tag _item) 4 最後に@itemsも配列に追加し、明示的に返り値としてddデータをparamsに送信(@test) ```ruby:item.rb def self.item_search(search) if search != "" @items = Item.where('name LIKE(?)

元記事を表示

Yay! I’m on Heroku!

# はじめに
[前回の記事 – Qiita](https://qiita.com/superrino130/items/7b574df107251914cc55)に味を占めたので、外部公開にそなえ`Heroku`に簡単なアプリを登録してみました。

アプリの内容は、@EightTreesCoffee さんの[この記事 – Qitta](https://qiita.com/EightTreesCoffee/items/d9bc07316e5b2f6900c2)を~~パクリ~~参照させていただきました。

# 完成画面
![20200905b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/db9a789e-03b8-463e-56e0-4a8459cd9f48.png)
[heroku アプリ](https://vast-bastion-88155.herokuapp.com/)
# heroku インストール
“`
C:\Users\user>npm install -g heroku

元記事を表示

ランダムな文字列を生成してみた

## はじめに
ランダムな文字列(今回は6文字の英小文字)を生成するプログラムをいくつかの言語で実装しました。
記事の作成者のスキルは、素人がほぼ独学でプログラミングを学んだ程度です。
記事中にコードの記述がありますが、おかしい箇所やアンチパターンなどありましたらコメントいただけると幸いです。

## 目次
1. [Herokuでアプリ名を自前にしたかった](#herokuでアプリ名を自前にしたかった)
1. [実装](#実装)
1. [C](#1-c言語)
2. [C++](#2-c)
3. [Python](#3-python)
4. [Ruby](#4-ruby)
5. [PHP](#5-php)
6. [Node.js](#6-nodejs)
7. [Swift](#7-swift)
8. [シェルスクリプト](#8-シェルスクリプト)
9. [JavaScript(HTML埋め込み)](#9-javascripthtml埋め込み)
10. [実装まとめ](#10-実装まとめ)
10. [結論](#結論)
11. [終わりに](#終わりに)

## Hero

元記事を表示

【Rails6 / Google Map API】住所を投稿してマップに複数マーカーを立てる

# はじめに

## つくるもの
こんな感じの投稿した住所または地名から緯度と経度を検索してそれぞれの地点にマーカーを立てるマップです。
(「東京都墨田区押上1丁目1−2」(スカイツリー)のように住所を投稿することも可能です)
![スクリーンショット 2020-08-28 1.54.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674324/d1774490-5d6d-1282-e7bd-30aa88610b0c.png)

## 用意しておくもの
#### 前提知識
今回はGoogleMapAPIを用いたマップの表示はできているものとして進めていきます。
GoogleMapAPIを用いたマップの表示がわからない人は下記の記事をお読みください。
[【Rails6 / Google Map API】初学者向け!Ruby on Railsで簡単にGoogle Map APIの導入する](https://qiita.com/nagaseToya/items/e49977efb6
86ed05eadb

元記事を表示

「Docker」フリーターが既存RailsアプリにDockerを仕込んでみた件について

こんにちは

今回はモダンな開発企業さんでは必ず取り入れているとの噂の

#Docker

の導入方法について紹介していきたいと思います
(自分へのメモ要素7割)

まず、Dockerとはについて解説をしたいのですが、
まだDockerを一度しか扱ったことがない僕が語るのも何なので、
Dockerとはを知るには[Dockerとはどういったものなのか、めちゃくちゃ丁寧に説明してみる](https://qiita.com/SatoshiSobue/items/a612ebbb3a9242c09db5)というこの記事がおすすめです。

サーバーに関する知識やDockerが使われるに至った歴史がわかります。

ではまずは
`dockerfile`を作成してこんな漢字

“`

FROM ruby:2.6 //バージョン指定 コマンドruby -v で確認

RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \

元記事を表示

Ruby/Rust 連携 (3) FFI で数値計算

連記事目次

* [Ruby/Rust 連携 (1) 目的](https://qiita.com/scivola/items/1f51a294c86a70aa78aa)
* [Ruby/Rust 連携 (2) 手段](https://qiita.com/scivola/items/d6de19cd985a5cd27f7e)
* Ruby/Rust 連携 (3) FFI で数値計算

# はじめに

FFI(Foreign Function Interface)を使って,簡単な数値計算を行う Rust の関数を Ruby から呼ぶ,ということをやってみよう。
既にこのようなテーマの記事は複数存在するので N 番煎じなのだが。

なお,

* macOS 10.13.6(High Sierra)
* Rust 1.46.0
* Ruby 2.7.1

を使用した。

# 題材

どうせならフィボナッチ数より実用性のあるものが作りたい。
よし,アレにしよう。
[Math.#hypot](https://docs.ruby-lang.org/ja/2.7.0/method/Math/m/hy

元記事を表示

【Rails】モデルスペックの基礎【RSpec】

# モデルスペックにおいての正常系/異常系

## そもそも正常系,異常系とは

### 正常系

簡単に言うと、**想定されたインプット(初期化等)があった時に、想定されたアウトプットや状態を得ることができること。**

### 異常系

**想定されていないインプットがあった時に、エラーを出力されるなどの想定されたアウトプットが得ることができるということ**

### 【例】ユーザー登録の場合

下記のデータを要求しているモデルがあったとする。

– name
– email address

上記の二つを満たしていれば、登録できる→**正常系**
上記の二つのうち一つでも欠けていると登録できない→異常系

# モデルスペックでの正常系/異常系を考える

– 正常な属性を持つモデルであれば有効
– バリデーション(異常)に引っかかる属性であれば無効

こんな感じで区別できますよね。

# よくわからないけど、書いてみようぜ。

## 前提

userモデルは下記の項目を必要とする。

– name
– password
– email

`email address`は**重複不

元記事を表示

has_manyとbelongs_toの存在チェック ー optional: trueとは?

# 動機
`belongs_to`側での、関連先の存在チェックは多くの場合で必要だと思いますが、`has_many`側での関連先の存在チェックはあまり出会すことがなかったので、調べてみました。

# やりたいこと
userモデルとteamモデルの関連付け。ただし、以下の制約付き。

– userが少なくとも1つはteamを持っていなければならない。(1つ以上のチームに所属する必要がある)
– 逆に、userに関連付いていないteamは存在してはいけない。

↓こんな感じの関連付けです。
![スクリーンショット 2020-09-04 19.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684915/5568f415-1057-ef3f-dc83-581c5d04b530.png)

# 環境
Rails 6.0.3
Ruby 2.7.1
mysql2 0.5.3

# postモデルの関連付け
“`ruby
class Team < ApplicationRecord belongs

元記事を表示

Ruby/Rust 連携 (2) 手段

連記事目次

* [Ruby/Rust 連携 (1) 目的](https://qiita.com/scivola/items/1f51a294c86a70aa78aa)
* Ruby/Rust 連携 (2) 手段
* [Ruby/Rust 連携 (3) FFI で数値計算](https://qiita.com/scivola/items/5ab8c6ba0b81a63d976e)

# はじめに

一口に Ruby と Rust を連携する手段といっても,さまざまなレベルややり方がある。

# Rust 製コマンドを利用

「なんじゃそりゃ」と言われそうだが,Rust で作られた CLI ツール(要するにコマンド)を Ruby から呼び出して使う,というのも連携方法の一つ。

Ruby 側から [Kernel.#system](https://docs.ruby-lang.org/ja/2.7.0/method/Kernel/m/system.html) や [IO.popen](https://docs.ruby-lang.org/ja/2.7.0/method/IO/s/pope

元記事を表示

Ruby 3.0 で変わる Module#include の挙動

[ブログ記事](https://secret-garden.hatenablog.com/entry/2020/09/04/163454)からの転載です。

今日の [RubyKaigi Takeout 2020](https://rubykaigi.org/2020-takeout) の [Ruby Committers vs the World](https://rubykaigi.org/2020-takeout/speakers#rubylangorg) でチラッと話が出たのでちょっとまとめてみます。

* 該当チケット:[Bug #9573: descendants of a module don't gain its future ancestors, but descendants of a class, do – Ruby master – Ruby Issue Tracking System](https://bugs.ruby-lang.org/issues/9573)

## 注意!!

これはまだ開発版の機能になり Ruby 3.0 がリリースされる

元記事を表示

【Ruby on Rails】コメント機能実装

# 目標
![コメント.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/8849d33c-25c8-caf9-c190-22ec6b6456a4.gif)

# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

# 前提
– [deviseでログイン環境構築](https://qiita.com/japwork/items/275110b810965fbdf72f)
– [ログインユーザーのみができる投稿機能](https://qiita.com/japwork/items/8dfb52121036791ac4fb)
– [投稿の編集機能(更新、削除)](https://qiita.com/japwork/items/e258ccbbe4f48ea5a3b5)

# テーブルの作成

“`:ターミナル
$ rails g model Comment user:references post:references comment:string

元記事を表示

Rails fields_for体系

## How to use
####Overview
formの中で異なるモデルに値を入力したい時に有効的よん。
####Example
Hotelモデルがあります。さらに、Hotelモデルと多対多の関係にあるFeeモデルがあります。これらは、ホテルとホテル予約料金プラン(複数)の関係性ですねー。

ホテル登録フォームがあります。その中には、ホテル予約料金プランを入力するフォームがありますっ。しかし!ここで問題が発生。通常のform_forを使ったフォームではモデルが1つしか設定できません?

そこで!fields_for登場。form_forに親モデルであるHotelモデルを指定。そして、form_forの中にfields_forを作りFeeモデルを指定。あとは、通常と同様にオプションを指定すれば、フォームにデータを入力できる!

(途中)

元記事を表示

rails server が停止できないときの対処法

## はじめに
Railsチュートリアルを進めているときに rails server が起動できないことがありました。
結論として、rails serverを終了していたつもりが終了できておらず、起動しっぱなしだったため新たに起動することができないということでした。
備忘録としてrails server終了できていないケースと、終了させる方法をまとめました。

### 動作環境
* Windows10 (64bit)
* WSL(Ubuntu 18.04.4 LTS)
* ruby 2.7.1
* Rails 6.0.3.2

## rails server が停止できなくなったとき
* **Ctrl + C をせずにターミナルウィンドウを閉じたとき**
ターミナルを閉じてもrails serverはバックグラウンドで動いている。
そのため、下記手順でserver を停止する必要がある。
1. ps コマンドにオプション aux をつけて rails server のプロセス番号を調べる。
最後のCOMMAND 項目が Rails アプリ名のプロセスが該当プロセス。

元記事を表示

Webサービスのリリース前に挫折してしまった3つの理由

Ruby on Railsをprogateで学習し、いざWebサービスを開発!!….50%くらい進んだところで挫折してしまいました。今回は、僕が途中で挫折してしまった理由を共有して、反面教師にしてもらいたく、記事を書きました。特に、僕みたいな初心者が陥りやすいポイントが詰まっていると思うので、ぜひ、開発前に読んでいただきたいです。

1. 開発の全体像を把握せずに、開発し始めてしまった

特に開発の経験のない方は、右も左も分からないも分からないと思います。僕は開発経験がなく、ひたすら目の前にあるタスクだけをこなしていました。開発の途中であれもこれもと修正して、その結果、初めに決めたコンセプトからどんどんずれていってしまうのです。

だから、開発の前から「開発のロードマップ」を作るのをお勧めします。「開発のロードマップ」については、Qiitaにとてもためになる記事があったので、ご紹介しておきます。
「個人開発における開発プロセスを公開してみる」
https://qiita.com/himatani/items/3b8301da2e889e962e5e

開発の全体像をアウトプットして

元記事を表示

エラーバンドリングの出し方

【概要】
—————————————-
1.結論

2.エラーバンドリングの出し方

3.詰まったところ

1.結論
—————————————-
validates.errors.any.errors.full_messages.eachを使う!

2.エラーバンドリングの出し方
—————————————-
まずmodelにバリデーションを設定します!

“`ruby:app/models/buy_item
with_options presence: true do
validates :name
validates :date
end
“`
with_optionsはdo~endまでのpresence: true(空欄はダメ)というのを一辺に設定できるものです。
こちらの場合はnameカラムとda

元記事を表示

Rails スクレイピング手法 Mechanize について

こちらのはてなブログに投稿しています。

元記事を表示

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

# 概要
[「実践Rustプログラミング入門」](https://www.shuwasystem.co.jp/book/9784798061702.html)pp.421-427を参照して、RubyからRustの関数を呼ぶ。
そういえば今日(2020年9月4日(金))は[Ruby Kaigi](https://rubykaigi.org/2020-takeout)。

# Windows用の準備
[RubyInstaller for Windows](https://rubyinstaller.org/downloads/)から、Windows用のRubyをダウンロードする。
本記事執筆時点最新は[Ruby+Devkit 2.7.1-1 (x64)](https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.1-1/rubyinstaller-devkit-2.7.1-1-x64.exe)。

![01_RubyInstaller2_01.png](https://qiita-image

元記事を表示

Rails6で複数チェックボックスを使う!

オリジナルアプリのユーザー登録機能実装中複数チェックボックスを使いました!
初心者のため備忘録として初投稿します!
間違えていたらコメントで指摘をお願いします笑

チェックボックスの書き方

チェックボックスといっても書き方は色々あります。
今回は関連するモデルがあるのでcheck_boxメソッドを使いました。

“`
<%= f.check_box :food, {multiple: true}, food, nil %>
“`
こんな感じです。
languageの部分はそれぞれ指定したいオブジェクト名を入れてください。
ちなみにカラムの型はtext型で指定しています。
複数選択を可能にする為に、{multiple: true}を書きます。

キーのパラメーターを許可する

今回のアプリ製作ではユーザー登録にdeviseを使用しているので、application_controller.rbにのprivateメソッド内にチェックボックスのパラメーターを許可する為の記述をします。

“`
def configure_permitted_pa

元記事を表示

[rails]dbの情報を表示する方法

やりたいこと
Itemテーブルの情報を全て抜き出す
ビューファイルindex.html.erbにデーターベースの情報を表示させる

前提
Itemテーブルの内容infoカラムがある!
infoカラムのに保存した内容を表示させたい

#①items_controllerに記述

“`
def index
@items = Item.all
end
“`
#解説
indexアクションが動いた時
@itemsにItemテーブル全ての情報が入るようにする。

#②index.html.erbファイルに記述

“`
<% @items.each do |item| %>
<%= item.info%>
<%end%>
“`
#解説
<% @items.each do |item| %>
@items←Itemテーブル全ての情報が入っている。
そこから中身の情報を全て抜き出してitem(変数)に一つずつ代入していく
<%= item.info%>
infoカラムに保存した情報
<%= %>
イコールをつけることによって情報を表示させることができる

Itemテーブ

元記事を表示

Ruby/Rust 連携 (1) 目的

連記事目次

* Ruby/Rust 連携 (1) 目的
* [Ruby/Rust 連携 (2) 手段](https://qiita.com/scivola/items/d6de19cd985a5cd27f7e)
* [Ruby/Rust 連携 (3) FFI で数値計算](https://qiita.com/scivola/items/5ab8c6ba0b81a63d976e)

# はじめに

Ruby と Rust はある意味で対極にある言語だ。従って,

* 両方を学ぶことでプログラミング観が広がる
* 組み合わせることで両方の特長が生かせる

のではないか,と期待したい。

そこで,何回かに分けて,Ruby と Rust の連携をさぐる記事を書いてみたいと思う。(長続きしない人間なのですぐ止まっちゃうかもしれないけど)

初回は,どんなときに連携すると嬉しいのか,連携の目的について考えてみた。

なお,筆者は細く長い Ruby 人生を送っているが,Rust はいつまで経ってもド素人のままである(というか,ほとんど Rust でプログラムを書いてない)。
システムプログラミング

元記事を表示

OTHERカテゴリの最新記事