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

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

RubyMine + Docker でデバッガーが使えなくなった時に行なったこと

# 状況

RubyMine + Docker でデバッグモードを起動しようとしたら
「Cannot start debugger. Gem ‘ruby-ide-debug’ isn’t installed」と表示される。

# 環境

RubyMine 2019.3.3
Docker desktop 2.2.0.3
macOS Mojave 10.14.6

Ruby 2.6.3
Rails 5.2.3
bundler 2.0.1

ここではDocker環境やRubyMineのリモートデバッグの環境構築方法は述べない。
(リクエストがあれば書こうかな)

# 原因

RubyMineのどこかのバージョンから ruby-debug-ide のバージョン0.7.0以上でないと動作しなくなった模様。

Gemfileでruby-debug-ideのバージョンを指定しないと0.6.1がインストールされる。

# 簡易な対応

基本的にはruby-debug-ideのバージョン0.7.0以上にするだけで良いはず。

### Gemfile修正

“`ruby:Gemfile
gem ‘

元記事を表示

rails generateで自動生成されるファイルの設定

## この記事は
`rails generate …`は必要な関連ファイルを自動生成してくれる便利なコマンドですが、「このファイルは不要だな」というものがあった場合、生成する度に削除していては手間がかかります。

そこで、自動生成するファイルを設定する(不要なファイルは生成しない)方法について書いています。

参考までに環境はこちら。

– Ruby 2.5.7
– Rails 5.2.3

## generateコマンドで自動生成されるファイル

まず、どのコマンドでどのファイルが自動生成されるかを次の一覧にまとめています。

| コマンド名 | コントローラ | ビュー | モデル | マイグレーション | アセット | ルート | テスト | ヘルパー |
|:–|:–|:–|:–|:–|:–|:–|:–|:–|
| scaffold | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| scaffold_controller | ○ | ○ | × | × | × | × | ○ | ○ |
| controller | ○ | ○ |

元記事を表示

Mac OS で PostgreSQL が起動できない時の対処方法 for Ruby on Rails

# 前提
homebrew を使う

# 時々起こる問題の種類
– OpenSSLをUpdateするなど、homebrew でUpdateをかけた時に、再起動で失敗する
– PostgreSQLのVersionをあげて、DBデータを置き換えるのに手間取る

# 基本的な役割の確認
– homebrew : インストール、アップデート
– Launchd : 起動

# homebrew の起動
こちら
https://qiita.com/takuya0301/items/c0720753de98572703b8

– 起動
– サービス状態のリスト表示

# postgres 起動後

## DB一覧

“`
psql -l
“`

DatabaseにRailsで利用するDatabase名があるか確認。なければつくる。

権限整合性がなくなるのを避けるため、psql で作らずに rails で作る。

“`
rake db:create
rake db:migrate
“`

DB作成で失敗したら、権限がないことを疑う。
エラーメッセージでわかる。

## ユーザー一覧
ター

元記事を表示

【Rails】CarrierWaveとRMagickでいい感じにサムネイルをつくる

#はじめに
CarrierWaveとRMagickで画像を指定したサイズでいい感じ(中心をくり抜く)に
トリミングしてサムネイルにするやり方についての記事です。
参考となるサイトは複数ありましたが、初学者である自分はその内容の解釈に苦労し、
かなり時間を使ってしまいました。
(今回参考とさせていただいたサイトは記事の最後にまとめております)
僕と同じ初学者の方の参考になりましたら幸いです。

#バージョン
Ruby 2.7.0
Rails 6.0.2.1
carrierwave 2.1.0
rmagick 4.0.0

#やり方その1 メソッドを作成するパターン
ちなみにやり方その2の方が簡単です。
自分はまずこちらのやり方にいきついたので、一応残しておきます。

アップローダーに下記のとおり記載。

“`ruby:image_uploader.rb
def create_thumb(width, height)
manipulate! do |img|
narrow = img.columns > img.rows ? img.rows : img.col

元記事を表示

[Rails]ItemImagesテーブルとItemsテーブルを別けた際のテーブルの紐付けから複数画像アップロードまで。

##Gemのインストール
“`ruby:Gemfile
gem ‘carrierwave’
gem ‘rmagick’
“`
画像投稿機能に関わるgemのインストールをお忘れなく。
gem’rmagick’は画像のリサイズなどに使用します。

##前置き
“`ruby:terminal
rails g uploader images
“`
リサイズなど画像の設定をする為のファイルが生成されます。

“`
app/uploaders/images_uploader.rb
“`

##モデルとの紐付け
imageが存在するモデルをItem_Imageモデルとしています。

ItemImagesテーブルとItemsテーブルは**1対多**の関係にあります。
画像は沢山のItemを持っているからです。
![2020-03-07 23.14のイメージ.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565275/db656bca-1303-2818-9728-b4888509091d.jpeg)

元記事を表示

投稿したユーザーのみ編集・削除を許可したい

##投稿したユーザーのみ編集・削除
【例】モデルをTweetとします。

“`app/views/tweets/index.html.erb
〜省略〜
<% if user_signed_in? && current_user.id == tweet.user_id %>

  • <%= link_to '編集', "/tweets/#{tweet.id}/edit", method: :get %>
  • <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
  • <% end %>
    〜省略〜
    “`
    上記で「ユーザーがログインしている」かつ「投稿したユーザーである投稿だけに許可」となります。
    current_user.id == tweet.user_idにより、ログイン中ユーザーのidと投稿したユーザーのidが一致すれば

    元記事を表示

    【Rails 5】link_toメソッドが効かずログアウトできなくて困った話【devise】

    Railsでアプリ作成をしていた際に下記のようなエラーに悩み、学ぶことが多かったので備忘録として記事にしてみました!?

    ## エラー内容
    Railsアプリでlink_toメソッドを使ってユーザーの削除機能を実装しようとした
    しかしdeleteアクションではなく、違うコントローラのshowアクションが動いてしまう。

    ## 解決方法

    ### link_toメソッドではなくbutton_toを使用!

    “`ruby
    <%= button_to "ボタン名", {パス or コントローラー名とアクション名 }, { オプション } %>
    “`
    [button_toメソッド参考記事](https://pikawaka.com/rails/button_to)

    “`ruby
    # 変更前
    <%= link_to "ログアウト",'/users/sign_out' , method: :delete %>

    # 変更後
    <%= button_to "ログアウト",'/users/sign_out' , method: :delete %>
    “`

    ## その他の解決方法
    ※未実施で

    元記事を表示

    本番環境で背景画像が表示されない場合の対処法

    どうも、岩城です。

    本番環境でデプロイできた!よっしゃ!

    「….え??
     背景画像が表示されてない…
     どぉしてだよおおおお!!!!」

    と、新世界の神から転落した人は少なく無いはず。

    # image-urlを試してみる

    “`
    .titlebg{
    background-image:url(images/bg.png);
    }
    “`

    これを

    “`
    .titlebg{
    background-image:image-url(‘images/bg.png’);
    }
    “`

    urlをシングルクォーテーションで囲うことを忘れないで下さいね^^

    これで表示されると思います^^

    元記事を表示

    w2uiのgridにソート機能を追加する

    ## やりたいこと
    前回導入したgridにソート機能を追加したい

    前回記事:
    https://qiita.com/wancoro/items/44de3104866cd6694b62

    ## 実装
    前回作成したスクリプト

    “`



    ```

    gir

    元記事を表示

    【Rails】brakeman設定からCircleCIで動かすまで

    # brakemanとは

    Ruby on Railsアプリケーション用の静的セキュリティ脆弱性解析スキャナーです。
    使うことのデメリットはないので、デフォルトで設定しましょう。

    # 環境

    - Rails 5.2.3
    - [brakeman](https://github.com/presidentbeef/brakeman) v4.8.0

    # インストール

    ```ruby:Gemfile
    group :development do
    gem 'brakeman'
    end
    ```

    # コマンド実行例

    ### ヘルプ(オプションなどを表示)

    ```
    $ bundle exec brakeman --help
    ```

    ### 全てのチェックを行う

    ```
    $ bundle exec brakeman -A
    ```

    ### 警告のうち、無視してよい項目を指定するファイルを作成する
    コメント(無視してよい理由)も書けるので、きちんと書いておきましょう。
    デフォルトでは config/brakeman.ignore にファイルが作られます。

    ```
    $ bundle ex

    元記事を表示

    【Rails】ActiveRecord::Validation::valid?

    #ActiveRecord::Validation::valid?
    任意のタイミングでオブジェクトに対してバリデーションを行うメソッド。
    問題があった場合は`member.errors.messages`でエラーメッセージを確認できる。

    ##バリデーションせずにオブジェクトを作成

    ```rb
    $ cd app/samurai/valid-demo
    $ bin/rails console
    >member = Member.new()
    ```
    上記の様にMemberを作成した時に、
    仮にnameを文字数を1〜10文字で制限をかけていたとしても

    ```rb
    => #
    ```
    作成されてしまいます。

    ##ActiveRecord::Validation::valid?でバリデーションする

    ```rb
    member.valid?
    => false
    ``

    元記事を表示

    【Rails】Validations

    #Validations
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/b3ea8d0c-c9ea-7733-7151-7adb44defb1b.png)

    上記の様な会員登録画面があったときユーザーが文字を入力する際に、
    入力されるデータが「全角数字であるか」や「数字以外の文字を入力しているか」等の開発者側が確認したいことがある。

    Validationsを使用すると、開発者側が確認したいデータの入力形式をユーザが入力する時点で気づかせてくれる。

    ###文字数の検証

    ```rb
    class Member < ApplicationRecord # nameの文字数は、1文字から10文字まで validates :name, length: { minimum: 1, maximum: 10 } end ``` 上記の様に記載することで「氏名」を入力するフォームに関して、 文字数を1〜10文字までというルール設定ができる。 ###条件付きで検証 「メ

    元記事を表示

    Rails + postgres + chromedriverのdocker-compose環境を作る

    RSpecでのFeature Specのためにはchromedriverが必要だが、docker-compose環境で実行するのは結構しんどかったのでまとめます。
    コードはこちらに記載しており、そのまま動かせるようになっています。

    今回はDockerやdocker-composeに対する説明はせず、chromedriverに関することのみ紹介します。

    ## 環境

    ```
    ruby: 2.7.0
    rails: 6.0.2.1
    postgresql: 12.2
    chromedriver: 80.0.3987.106
    ```

    ## TL;DR

    1. chromeのインストール(署名が必要)
    2. 依存ライブラリのインストール
    3. インストールしたchromeのバージョンに合わせたchromedriverをインストール
    4. rails_helper.rbにchromedriverの実行時オプションを追加

    この4ステップが必要だった。

    元記事を表示

    【Rails】Strong Promoters

    #Strong Promoters
    コントローラファイルに記載するセキュリティを強固にする仕組み
    name, email,password,password_confirmationの4つのカラムがある時

    ```rb
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
    ```
    上記のよう記載することで4つのカラムがparamsハッシュに対して受け取りを許可し、
    他は無効にすることができる。

    詳しく説明すると、
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/96837c67-8fec-d447-0410-12a8225848d1.png)

    上記のような画面フォームがあった時に画面内の4項目以外はデータを受け取らないようにすることができる。
    これをしないと、ID情報とかを書き換えられてしまう可能性がある。

    #参考URL
    https://nyoken.com/stro

    元記事を表示

    寿命を予測してカウントダウンするだけのクソアプリ作ったwww

    # 0.目的
    大目標はRuby on Railsの勉強。
    一応チュートリアルを一周したのですが、やっぱり自分で何か作ってみないと畳水練です。
    なので、何でもいいからWebアプリを一個でっち上げる事を小目標にしました。
    # 1.企画
    **オーッ! ノーッ**
    **俺の好きな言葉は一番が「怠慢」で二番目が「先延ばし」なんだぜーっ**(画像略)
    筆者は絵に描いたようなダメ人間。締め切りが迫ってこないと1ミリたりとも動けません。
    そこで、寿命という絶対に逃れられない締め切りを活用するアプリを構想しました。
    **あんたアホか! 残りの人生で今この時が常に一番若いねんでっ!**(画像略)
    と実感させてくれるWebアプリとして「余命が一秒ずつ減っていくのを表示するアプリ」を計画します。

    「Railsを勉強するという大目標に対して、この企画は選択ミスだったんじゃないか?」と気付くのはまだ先の話。
    # 2.使用技術
    Ruby:Ruby-Gtkでデスクトップアプリを作ろうとして挫折した経験あり。
    Rails/HTML/CSS/JavaScript:Railsチュートリアルを一周しただけ。

    Rubyは半

    元記事を表示

    【Rails】resources_collectionの使い方

    #collection
    全部のデータに対するアクションに利用する。
    例えばユーザーの検索機能である「serchアクション」を実装するとして、下記の様にコードを記載する。

    ```config/routes.rb
    Rails.application.routes.draw do
    resources :users do
    get :search, on: :collection
    end
    end
    ```
    `get :search, on: :collection`
    上記のコードで、どのユーザから見ても全てのユーザを検索できる様になっている。

    元記事を表示

    【Rails】resources

    #resources
    RESTfulな設計を実現するために開発者自身でHTTPメソッドとURLとアクションを紐付けを行うのは手間がかかるため、
    Resourcesメソッドを使い自動でRESTfulなルート定義を行う。

    ```route.rb
    resouces :name
    #nameはリソース名
    ```

    「name」の部分が対象のモデルのテーブルになる。

    例えば

    ```rb
    #railsコマンドでモデル作成
    $ rails g model product

    #routes.rbに以下の定義を追加
    resources :products

    #自動生成されたルートを確認
    $ rails routes
    ```
    rails routesコマンド

    ```rb
    Prefix Verb URI Pattern Controller#Action
    products GET /products(.:format) products#index
    POST /p

    元記事を表示

    上場前のベンチャーに入ってストックオプションで一攫千金は可能か?

    Quoraの[上場前のベンチャーに入ってストックオプションで一攫千金を狙うのは日本でも出来ますか?](https://qr.ae/pNt6sy)を参考にしてます。

    #アメリカの場合
    シリコンバレーでは,上場しそうな会社に入社して、ストックオプションで億万長者になる人が多いです。ストックオプションの一獲千金を目当てに会社を転々とし、たくさんのお金を稼ぐ人もいるそうです。

    #果たして、この方法は日本でも可能でしょうか?

    もらえるお金の規模感は違いますが、日本でも同じことは出来ます。
    しかし、この方法はリスクもあります。

    上場できず、倒産の可能性、また入社してからの上場が早すぎてストックオプションがあまりもらえないなどといった事があります

    ベンチャーと言ったらIT関連が思い浮かびがちですが、飲食店関連の会社の上場ののパターンなどもあるようです。

    元記事を表示

    Vue.jsとRails APIモードでストレスフリーに少人数開発できた話

    # はじめに
    去年からエンジニアの友人と**TeXで書けるQ&Aサービス**というものを開発しており、今回無事にリリースまで到達できました。

    フレームワークはフロントはVue.js、バックエンドはRuby on Railsを使用しました。

    友人はフロントエンド、自分はバックエンドがそれぞれ得意領域だったので、なるべくお互いの領域に集中できるようにフロントエンドとバックエンドはリポジトリごと完全に分離しました。(どうしてもフロントの方が書くべきコード量が多くなるので、最終的には自分もフロントを手伝うことになりました。。。)

    思いの外快適に開発を進められたので、もし他にも友人と楽しく個人開発したい!という方の参考にでもなればと、開発体制やサービスのアーキテクチャなどを軽く共有してみようと思います。

    # サービスの概要

    TeXで書けることが売りのQ&Aサイトです。
    [ELPOT TeXで書ける理系向けQ&Aサイト](https://el-pot.com)

    TeXというのは1978年に*Donald E. Knuth*が開発した、比較的歴史のある"組版システム"です。
    大学で理系

    元記事を表示

    OTHERカテゴリの最新記事