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

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

画像投稿機能実装時のNil location provided. Can’t build URIエラー対処

#環境
・Rails 5.2.4.1
・gem ‘carrierwave’
・gem ‘rmagick’

##エラー
ArgumentError
Nil location provided. Can’t build URI

この様なエラー表示されました。
スクショ撮るのを忘れました(汗)

色々とググった結果、、
画像投稿機能を実装前にテスト投稿したものに画像が含まれたいないため
エラーとなっている模様

##解決方法
すでに投稿しているもので画像が含まれていないものを削除
今回は全てを削除。

“`
rails c
“`
“`
Post.destroy_all
“`

これで解決できました!

参考サイト
https://simpledancer.hatenablog.com/entry/2019/05/19/Nil_location_provided__Can’t_build_URI%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%9F%E6%99%82%E3%81%AB%E3%82%84%E3%81%A3%E3%8

元記事を表示

#Ruby でカンマ区切りの文字列をメソッドの複数引数として渡す例

“`rb
# 複数の引数を受け取るメソッド
def foo(a, b)
p a
p b
end

# カンマ区切りの文字列を split で配列にする
“x,y”.split(“,”)
# => [“x”, “y”]

# 配列をアスタリスク * で 引数として渡す
foo(*”x,y”.split(“,”))
# “x”
# “y”

“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3047

元記事を表示

商品出品画面を作る②ActiveStorage(複数画像投稿)

# ActiveStorageを使用して複数枚の画像を投稿する
先ずはここを見てください[Railsガイド](https://railsguides.jp/active_storage_overview.html)、導入方法とか書いてあります。
S3に接続するときは注意が必要ですね。

### そもそもActiveStorageは何がいいのか?
ActiveStorageの特徴としては画像をitemモデルとして扱えることでしょう。
どう言う事かと言うと、itemとimageが1:多の関係だとすると、テーブルを2個用意しないといけません。
そしてアソシエーションを組んで〜と言う処理をします。
削除や変更の時に処理が若干複雑になってしまいます。
そんな時、ActiveStorageならitemテーブルのみを対象に処理をすれば良いわけです。

### 今回の要件
– 複数同時選択による複数枚の画像投稿
– 複数回選択による複数枚の画像投稿
– プレビュー表示
– 投稿枚数管理
– プレビューの削除

“`ruby:imet.rb
has_many_attached :images
“`

元記事を表示

SNS認証ログインでNot found. Authentication passthru.が表示されたときの対処方法

# 執筆背景
先日、個人アプリ(フレームワークにはRuby On Railsを使用)をリモートリポジトリーにプッシュした際GitHubからgem “OmniAuth”の脆弱性について指摘された。
詳細 → https://github.com/omniauth/omniauth/pull/809

そのため、それに対応するgem “omniauth-rails_csrf_protection”をインストールした。

“`ruby:Gemfile
gem ‘OmniAuth’ #削除
gem ‘omniauth-rails_csrf_protection’
“`

“`
bundle install
“`
ローカル上でアプリを再起動すると以下のようなエラーが発生したため、対処方法を示す。

スクリーンショット 2020-03-25 1.27.30.pngユーザーの新規登録時に入力なしの初期値を設定する【Ruby on Rails】

### 目的
ユーザーの新規登録時に、直接入力させずにテーブルに初期値を保存させること。

### 使用する技術
– gem devise

# 実践
以下のテーブルが作成してあるとします。

|Column|Type|Options|
|——|—-|——-|
|username|string|null: false, unique: true|
|email|string|null: false, unique: true|
|password|string|null: false|
|coin|integer|null: false|

今回は、ユーザー登録フォームで

– username
– email
– password

の3項目をのみを入力させます。
ここで、**coinカラムは入力させずに、初期値0としてテーブルに保存します。**

### 事前準備
すでに、gem deviseが導入され、コントローラとビューの作成が終了しているものとします。
(このような画面まで用意されている所からです)
devis</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>devise</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tomoya_sepia/items/78b8333d2908256069a1'>元記事を表示</a></div>
<h3 id=Reinitialized existing Git repository in が出たときの対処法

## はじめに
ただの備忘録のうちのひとつ。将来のために、、、

## git init したときのやつ
“`
$ git init
Reinitialized existing Git repository in ~
“`
## 結論:やることない
特にやることない。Reinitializedとか言うから「初期化して最初から⁉」とか思ってたけどそうではないらしい。

## 関係ないけど
名前とメールの確認もたまにしたくなる

“`
$git config –global –list
user.name=hogehoge
user.email=hoge@gmail.com
“`

###### 参考
https://qiita.com/ragingalpaca/items/ef247e459ff2e7759ba9

gitのauthorの確認と変更

チーム開発 3/24

#メモです
商品出品機能のサーバーサイドを作っていく

画像を貼る際にすぐに画像が
プレビューできるようにする
複数画像を送信できるようにする

使うメソッド
fields_forは,file_fieldや collection_check_boxesなどと
同じくフォームのインプット要素を生成するフォームヘルパーです。
1つのリソースに対し紐づいた、
複数の別のリソースを同時に保存したい際に利用します。
例えば今回のような1投稿に対して複数の画像をつけるパターンや、
1投稿に対して複数のタグをつける時などにも利用できます。

“`ruby
<%= form_for @product do |f| %>
商品名<%= f.text_field :name %>
価格<%= f.number_field :price %>
<%= f.fields_for :images do |i| %>
<%= i.file_field :src %>
<% end %>
<%= f.submit %>
<% end %>
“`

accept

元記事を表示

Railsフリマアプリ payjpを使ってクレジットカードを登録・削除

# payjp とは・・・?
`クレジットカードを登録、変更、購入を行ってくれる便利なAPIです。`
みんさんもフリマアプリ、ECサイトでクレジットカードを使って商品の購入すると思います。その時登録したクレジットカード情報はどこに保存されているでしょうか?私は運営するサイトで暗号化されて管理されているのだと思っていましたが、違うようです。たしかにサイトのデータベースにクレジットカード情報を登録するのはセキュリティ上よろしくないですよね。
このとき登場するのが`payjp `になります。

# payjpの仕組み
まずpayjpとフリマアプリではどのような流れでクレジットカードの処理が行われているのかざっくりとイメージしましょう!
私はここを飛ばしてすぐコードを書き初めてため概念の理解に時間がかかりました。わかれば非常に単純でした。笑
以下の記事がとてもわかりやすく参考になります。
[Pay.jpの仕組みについて!](https://qiita.com/wacker8818/items/d050f1b5632a271ebda5)
セキュリティに加えて、payjpで発行されるトークンと顧

元記事を表示

Kinx 実現技術 – JIT

# JIT Compile – Just In Time コンパイル

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。作ったものの紹介だけではなく実現のために使った技術を紹介していくのも貢献。その道の人には当たり前でも、そうでない人にも興味をもって貰えるかもしれない。

前回のテーマは [VM (Virtual Machine)](https://qiita.com/Kray-G/items/034454f69dfa914f56c9)。今回のテーマは JIT。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](ht

元記事を表示

商品出品画面を作る

# メルカリの商品出品画面を参考にコピーを作る
参考画面[メルカリ](https://www.mercari.com/jp/sell/)

使用する機能

– ActiveStorage(画像投稿)[リンク](https://qiita.com/m-kawakami/items/492f18473a4c31ca9c5f)
– ancestry(多階層カテゴリー)
– active_hash(静的データ作成)

##とりあえず出来たコード
“`haml:new.html.haml
.sell
%header.sell-header
= link_to root_path do
= image_tag ‘mercari_top_logo.svg’, alt: ‘mercari’, height: ’49’, width: ‘185’
-#メイン部分
%main
%section.sell-container
= form_with model: @item do |f|

-# 画像部分
.sell-c

元記事を表示

7つのアクション

今回は、コントローラで使用する7つのアクションについて紹介します!
アクションとは、ルーティングがリクエストを受け取った時に動くものです

アクション毎に行われる処理を分けて記述することによって、役割をわかりやすく分類化できます!

| アクション名 | どんなリクエストに対応して動く? |
| —- | —- |
| index | 一覧ページを表示する |
| new | 新規投稿ページを表示する |
| create | データの投稿を行う |
| show | 個別の詳細ページを表示する |
| edit | 投稿編集ページを表示する |
| update | データの編集を行う |
| destroy | データの削除を行う |

この7つのアクションは基本になる所なので、ぜひ覚えて活用できるようにしてみましょう^^!

元記事を表示

【Rails】アクセス制限を記述する手順と、その思考手順をまとめてみました

##はじめに
Railsを学習した直後のアウトプット時、いざアクセス制限機能を実装しようと試みた際に、何をどうしたらいいのか思い浮かばなかったのが悔しかったため
次に同じ轍を踏まないよう、自分用にアクセス制限の実装順序を整理してみました。

##まず、アクセス制限って「何を」実装する機能なのん?
主にWebアプリケーションにおいて**ログイン機能を実装した後**で
**ユーザーがログインしている場合と、ログインしていない場合**とで、使える機能を制限する機能。

##それじゃあ、「どうすれば」実装できるのか?
例えば
・**ユーザーがログインしている場合**で一つ条件式を記述し、制限用の処理を記述する。
・**ユーザーがログインしていない場合**でもう一つ条件式を書き、制限用の処理を記述する。

“`ruby
if #(ユーザーがログインしている場合の条件式)
redirect_to(“URL”) #制限用の処理
end
“`

 
##コードは「どこに」記述するん?
簡単な掲示板アプリ作成を例として、「ユーザーがログインしていない場合」のア

元記事を表示

exifrを使用したフォルダ内画像のexifデータ一括抽出

プログラミング初心者です。
任意のフォルダ内に格納されている画像のexifを抽出するのに手間取ったため、備忘録として残します。

“`php

require ‘exifr/jpeg’
require ‘csv’

puts Dir.pwd

dir_name = “/Users/任意のフォルダパス”

Dir.chdir(dir_name)
dir = Dir.open(dir_name)
puts Dir.pwd

CSV.open(‘exif.csv’,’w’) do |csv|
csv << ['model','lens','f','exposure','iso','date'] name = p Dir.glob('*.JPG') name.each do |syashin| exif = EXIFR::JPEG.new(syashin) a = exif.model b = exif.lens_model c = exif.f_number.to_f d = exif.exposure_time e = exif.i

元記事を表示

[WIP]RuboCop規約一覧表

## 一覧

|区分 |規約 |Cop数 |
|:–|:–|:–|
|Bundler |Bundlerファイル |4 |
|Gemspec |gemspecファイル |4 |
|Layout |インデント、行端揃え、スペースの一貫性 |88 |
|Lint |曖昧性と潜在エラー |82 |
|Metrics |プロパティ |9 |
|Migration |rubocop.yml内のCop名 |1 |
|Naming |命名規則 |16 |
|Security |メソッド呼び出し、構造に潜むセキュリティホール |5 |
|Style |Ruby Style Guideに準拠したスタイルの一貫性 |172 |

## Bundler

|Cop名 |解析対象 |デフォルト |
|:–|:–|:–|
|[Bundler/DuplicatedGem](https://github.com/rubocop-hq/rubocop/blob/master/manual/cops_bundler.md#bundlerduplicatedgem) |Gemfile内のライブラリが重複していな

元記事を表示

gem install mysql2エラー(Error installing mysql2)

mysql2をインストールした際エラーが出たため、情報共有します。

インストールコマンド

“`
gem install mysql2
“`
エラー内容

“`
Building native extensions. This could take a while…
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

current directory: /Users/aki/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/ext/mysql2
/Users/aki/.rbenv/versions/2.7.0/bin/ruby -I /Users/aki/.rbenv/versions/2.7.0/lib/ruby/2.7.0 -r ./siteconf20200324-90394-m50btx.rb extconf.rb
checking for rb_absint_size()…

元記事を表示

Rails 投稿機能

Railsで投稿機能の作成です:point_up:
部分的な備忘録ですので分かりづらいと思います

##railsアプリケーション作成

“`
$ rails _5.2.3_ new sample_boad -d mysql
“`
###Gem追加
bundle installとbundle updateを実行

“`
gem ‘pry-rails’
gem ‘compass-rails’, ‘3.1.0’
gem ‘sprockets’, ‘3.7.2’
“`

##データベース作成

“`
$ rake db:create
“`

####モデル作成

“`
$ rails g model tweet
“`
####テーブル作成
マイグレーションファイルはテーブルの設計図のようなものです。
t.の後に続いている記述は、どんなデータが入るのかを示す型です。

srting 文字(少なめ)
text 文字(多め)
integer 数字
などがあります。

timespasはcreated_at(作成時間) や updated_at(更新時間) を定義する時に使用しま

元記事を表示

RailsでRSpecを追加しようとした時に発生したエラー「Could not find diff-lcs-1.3 in any of the sources Run `bundle install` to install missing gems.」の対処法

“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
end
“`
GemfileにRSpecを追加して、以下のコマンドを実行したらエラーが発生した。

## エラーメッセージ

“`sh
$ bundle install
・・・
$ rails generate rspec:install
Could not find diff-lcs-1.3 in any of the sources
Run `bundle install` to install missing gems.
“`

## 解決方法

“`sh
$ ps axu | grep spring
maiamea 53324 0.1 0.1 4336604 9524 ?? Ss 4:41PM 0:00.92 spring app | api-project | started 5 mins ago | development mode
maiamea

元記事を表示

線分の交差判定と交点特定

# はじめに

二つの折れ線グラフがある時、そのグラフの交点を探したいことがあります。こんな感じです。

![intersection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79744/7d8b5ddc-5c35-9e71-7a20-9e694bdf9f71.png)

典型的には異なるサイズのBinder比の交点を見つける時とかに必要です。で、そのためには「二つの線分の交差判定」をするコードと「交差する二つの線分の交点」を求めるコードが必要になるのですが、なんかこれ、必要になる度に毎回書いている気がするので、以下では交差判定と交点を求めるアルゴリズムを真面目に導出して、それをコードに落としてCC0で公開しました。

[https://github.com/kaityo256/find_intersection](https://github.com/kaityo256/find_intersection)

なお、線分直上に点があったり、二つの線分が平行だったりといった条件は考慮していないので

元記事を表示

rails 新規アプリ作成

# はじめに
今まで学習した知識を使って、オリジナルアプリを作るカリキュラムの段階まできました。
自身のアウトプット、皆さんへの共有の目的で、これから個人アプリが完成するまでの流れを投稿していきます。

## Railsで新規アプリを作成する

ターミナルにて

“`
$ rails _5.2.3_ new 〇〇 -d mysql
“`
を、実行する。

railsのあとの『_5.2.3_』はrailsのバーション指定。
〇〇は作成したいアプリ名。
-dはデータベースの意味。
私の場合、データベースはmysqlを使用したかったので、-dで指定しました。

作成するアプリのディレクトリへ入り、ターミナルにて

“`
rails db:create
“`

を実行してデータベースを作る。

ここでひとまずアプリの大枠は完成です。
試しに

ターミナルにて

“`
rails s
“`
でサーバーを立ち上げ、localhost:3000へアクセスすると

![rails_welcome.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

deviseでログイン機能を実装したものの、データベースへ書き込めない問題

##起きた問題
deviseにてユーザーのログイン機能やユーザー編集機能などを実装したが、ユーザー編集機能のページedit.html.erbにて入力した内容がうまくデータベースに反映されない。

具体的にいうと**nameのカラムだけなぜかdbに反映されなかった**ので、調べてみた。

schema.rbを見てもちゃんとカラムが追加されている。。。

##解決した方法とソース

まず、解決した方法は簡単で、application_controller.rbに以下のコードを追加するだけ。

“`ruby:application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters # 「登録時(sign_up)」に許可するパラメータを追加 devi

元記事を表示

OTHERカテゴリの最新記事