【rails】each文で@postsの要素を配列として並べる書き方
どうも、岩城です。
みなさん、each文は好きですか?好きですよね?違いますか?
さて、そんな私が絶賛片思い中のeach文ですが、railsの中ではどのように使われるのでしょうか。見ていきましょう。
###まずはこちらを見てみましょう
“`<%= truncate(post.title, :length => 60) %>
Posted by <%= post.user.name %><%= post.title %>
<%= post.content %>
<%= link_to "I'm inter
【Ruby】大量のURLのHTTPステータスコードを取得してCSVで出力する
# はじめに
大量のページのHTTPステータスコードを確認しなければいけないコトがありまして、
スプレッドシートやら、無料のWebサービスを利用したんですがイマイチちゃんとできなかったです。
スプレッドシートのスクリプト実装がよくわからなかった。
無料のサービスだと100件までしか確認できない、多すぎて途中でコケてしまうなどありました。そのためRubyで実装したという経緯があります。
また自分が使用するかもしれないのでメモがてら記事書きます。
HTTPステータスがヨグワガンニャイ人は下記の記事を見てみてください。
[httpステータスコード一覧 – 各コードの意味・影響・対処法を解説します](https://www.gc-seo.jp/journal/other/status-code/)# 完成したソースコード
“`ruby
require ‘csv’
require “net/http”urls = []
CSV.foreach(“urls.csv”) do |row|
urls << row[0] end puts "#{urls.length}件のURRuby/GTK3 – ProgressBar
`gem install gtk3`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/ad4d5fd4-142a-4f85-2b58-6a5b16e457fe.png)
“`ruby
# frozen_string_literal: truerequire ‘gtk3’
class ProgressBarWindow < Gtk::Window attr_accessor :progressbar, :activity_mode def initialize super self.title = 'ProgressBar Demo' self.border_width = 10 vbox = Gtk::Box.new(:vertical, 6) add vbox @progressbar = Gtk::ProgressBar.new vbox.pack_start progressbar
読書ログ『メタプログラミング Ruby 第2版』5章
## 5章: 木曜日: クラス定義
はじめに
– Rubyのclassキーワードは、オブジェクトの動作規定だけでなく、実際に**コードを実行**している
– この章では、クラスマクロ(クラスを修正する方法) / アラウンドエイリアス(メソッドをコードでラップする方法) / 特異クラス(シングルトンクラス) を説明する## クラス定義とは
– クラス定義にはあらゆるコードを置くことができる
– メソッドを定義するだけの場所ではない“`ruby
class MyClass
puts ‘Hello’
end
“`– メソッドやブロックと同じように、クラス定義も最後の命令文の値を戻す
– クラス(やモジュール)定義の中では、クラスがカレントオブジェクトselfになる
– クラスとモジュールも単なるオブジェクトにすぎない。“`ruby
result = class Myclass
self
endresult #=> MyClass
“`## カレントクラス
– Rubyのプログラムは、常にカレントオブジェクトselfと **カレントクラス**
【完全版】MacでRails環境構築する手順の全て
## この記事は
**初心者でも迷わず環境構築ができるよう、1つ1つの手順を丁寧に解説した記事**です。
なるべく「どうしてこのコマンドを実行するのか」も解説するようにしています。**「環境構築が苦手、よくわからない」**という方は、ぜひ参考にしていただければと思います。
また「railsのバージョン指定がうまくいかない…」と悩んでいる方にも参考になると思います。※もしこれを読んでもうまくいかなければ、ぜひ積極的にコメントいただけますと幸いです!
## マシンスペック
参考までに、私のマシンスペックは以下の通りです。– macOS Catalina 10.15.3
– MacBook Air (Retina, 13-inch, 2018)
– Intel Core i5
– メモリ 8GB## Ruby, Railsのバージョン
それぞれ下記バージョンで構築することを目指します。– Ruby 2.5.7
– Rails 5.2.3## 全体の流れ
この順番でインストールしていきます。1. rbenv(Rubyのバージョン管理ツール)
2. Ruby
3PythonとRubyのインスタントメソッド文法(勉強中)
今回はPythonとRubyの勉強として、
インスタンスメソッドの文法を比較してみたいと思います。
インスタンスメソッドはオブジェクト指向の基本的な内容で、
様々な言語で比較してみたいと考えております。今回の用いるPythonとRubyは下記バージョンで実施しております。
Python: 3.7.4
Ruby: 2.6.3
## Pythonでの例“`python:test.py
class Test:
def __init__(self):
print(‘勉強中’)
“`## Rubyでの例
“`ruby:test.rb
class Test
def initialize
puts(‘勉強中’)
end
end
“`比較のすると「:」や「end」の有無などが違うかなという印象です。
随時更新させていただきます。
Ruby 2.7.0 で速度が重要なときは double splat 引数に double splat 演算子をつけてハッシュを渡すより単にハッシュをハッシュとして渡すほうが良い
Ruby 2.7.0 にして、キーワード引数関連の大量の警告を出ないように変更していったところ、指定の時間内で処理が終わるというテストが失敗するようになったため、もしかして警告に合わせて変更した部分が影響しているのではないかと考え、速度を調べてみました。
“`ruby
RUBY_VERSION # => “2.7.0”h = { a: 1, b: 2, c: 3 }
def f1(o = {})
enddef f2(**o)
endrequire “active_support/core_ext/benchmark”
def _; “%7.2f ms” % Benchmark.ms { 1000_0000.times { yield } } end
_ { f1(h) } # => ” 857.01 ms”
_ { f2(h) } # => “1955.95 ms”
_ { f2(**h) } # => “3679.11 ms”
“`これでわかったこと
1. ハッシュをハッシュとして渡すのはかなり速い
2. `【Rails】Rakeタスクに:environmentがないとNameErrorが出る
## エラー
Rakeタスクを実行したときに、`NameError: uninitialized constant ClassName`が出る。
“`rb:send_summary_mail.rake
namespace :send_summary_mail do
desc ‘管理者に記事数一覧をメール送信する’
task :send_mail do
SummaryMailer.daily.deliver_now
puts ‘メールを送信しました’
end
end
“`“`terminal
$ rake send_summary_mail:send_mail
rake aborted!
NameError: uninitialized constant SummaryMailer
/Users/k_end/workspace/application/lib/tasks/send_mail_summary.rake:4:in `block (2 levels) in‘
Tasks: TOP => send_suスクリプト言語 KINX/【雑多なこと】その後サポートした機能
# はじめに
「**見た目は JavaScript**、**頭脳(中身)は Ruby**、(**安定感は AC/DC**)」になっているかはさておき。
解説ばっかりで疲れてきたので、解説とは別に雑多な話題をご提供。いくつか機能をサポートしました。ドキュメントをそろえてバージョン 1 を何とかリリースしたいところ。
# その後サポートした機能
構文的な追加とライブラリの追加をしました。
## 構文
### module
`module` と `mixin` という予約語で、後から機能をアタッチできる仕組み。
“`javascript
module Printable {
public print() {
System.print(@value); // `this` is not Printable’s instance but host class’s instance.
// In this case, this means Value’s instance.
}
p【RSpec】toggleされた要素へのクリック対応
#はじめに
RSpecでユーザー登録の統合テストをかいているときに、
toggleされた要素に対するクリックのやり方でつまづきました。
僕と同じ初学者の方の参考になりましたら幸いです。#RSpecでのテスト
RSpecでの簡単なテストを一部抜粋。
ルートページで「新規登録」ボタンをおすと、
「ユーザーの新規登録」と記載されているページに遷移することを確認するテスト。“`
it ‘ユーザー登録ページが表示される’ do
visit root_path
click_on ‘新規登録’
expect(page).to have_content ‘ユーザーの新規登録’
end
“`下記エラーが発生。
“`
Failure/Error: click_on ‘新規登録’Capybara::ElementNotFound:
Unable to find visible link or button “新規登録”
“`
slimには`=link_to signup_path, class: ‘nav-link’ do | 新規登【Rails】/users/:id ではなく/:username にする
# 理想
—
## やり方
to_paramを使用する“`ruby:user.rb
class User < ActiveRecord::Base validates_presence_of :username validates_uniqueness_of :username, case_sensitive: false def to_param username end ``` --- ```ruby:users_controller.rb class UsersController < ApplicationController def show @user = User.find_by(usドリルTX45
class ArticlesController < ApplicationController def show article = Article.find(params[:id]) end end これでは表示されない、、、 Railsではコントローラで設定された「インスタンス変数」がビューに渡される仕組みになっている。 コードのarticleは通常のローカル変数であるためビューで使うことができない。そのため、articleを@articleに変更すればよい。 4行目のArticle.find(params[:id])という記述のうち、params[:id]には詳細表示されたいレコードのidが格納されます。なぜそのような動作になるのか、「rails routes」という言葉を使って説明してください。 rails routesを使ってアプリケーションのルーティングを確認すると、通常showアクションには以下のような設定がされている。 1 Prefix Verb URI Pattern
rails sができない時の対処方
# rails sを叩くとエラー出力
spring stopを試して解決できず少し詰まったので備忘録として残します。
“`
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:90: warning: already initialized constant FileUtils::VERSION
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.4.1/lib/fileutils.rb:105: warning: previous definition of VERSION was here
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant FileUtils::Entry_::S_IF_DOOR
/Users/ara【Ruby on Rails】フォームオブジェクトを使って検索キーワードをcontrollerに送る
## 想定対象者
– Ruby on Railsで検索フォームを独自で作りたい
– ransackを使いたくない
– Google Books APIを使ったポートフォリオを作りたい(本記事ではあんまり関係ないけど)## (個人的に)実現したいこと
Google Books APIでは以下URLにキーワードを入れるだけで検索結果を返してくれるという仕様があります。
https://www.googleapis.com/books/v1/volumes?q=(ここにキーワード)これを使えば、最終的に以下のようなViewの実装が思い浮かびます。
(ただし、この解説は別記事で予定)“`ruby:books_controller.rb
@books = 処理(keyword)
>> [book1, book2, book3, ….]
“`“`slim:search.html.slim
= @books.each do |book|
= image_tag book.image
= book.titile
= book.author
= (略)
“`ログインshellの変更、そしてrbenvでインストールしたRubyをデフォルトにする方法
ゴールはrbenvでインストールしたRubyをデフォルトで開けること。
→その設定が書かれた.bash_profileというファイルを
デフォルトで読み込んでもらえないというのが問題でした。前回記事
https://qiita.com/hacchi_mom/items/2095e6ac7aecd03f131a# .bash_profileについて
まず.bash_profileってなんなんだというところから調べると
【ログインの際に読み込まれる設定ファイル】とのこと。そして重要なのは、その設定ファイルは
【ログインshellがbashのときに読み込まれるもの】
ということ!!!!# ログインshell問題
ログインshellとはログイン時に起動するshellのことですが
そもそも私の起動時のログインshellはbashではなくzshだったのです。Terminal起動時に毎回まず`bash`と一度打ってから
全ての作業を始めておりました…そういうもんだと思っていました。笑初歩すぎること書いててすいません。。。
だから.bash_profileを読み込んでもらRails環境下でembulkを使って快適に数十万件のデータを取り込む
こんばんわ。人に裏切られるのと同じくらいの仕打ちを受けて、最近意気消沈しているプレイライフエンジニアの合原です。
今回は弊社でのembulkの活用事例について、まとめます。
# embulk活用前
弊社では、特集記事や遊びのプラン記事では、グルメやホテルの紹介もあり、漏れなく、アフィリエイト広告(以降アフィリエイト)を掲載しています。> 例
> https://play-life.jp/articles/1550
> https://play-life.jp/articles/1510こういった感じで。
また、日本全国には、グルメ・ホテルなど、数えきれないほどの店舗数があり、自ずと、各種アフィリエイト用の店舗データも大量なものとなります。
にも関わらず、embulkの活用前までは、rubyで何万ー何十万と言うデータを`insert`, `update`と。。。やっている始末でした。# こんな時こそのembulk
embulkです。
[[ruby,rails]gemのバージョンのdefault設定解除方法#1.エラーの例
“`
$gem uninstall railties -v ‘6.0.2.1’ #アンインストールコマンドです
~中略~
gem “railties” cannot be uninstalled because it is a default gem #エラー文
“`railsやその周辺のgemをダウングレードするべく、最新のgemに対し上記のアンインストールコマンドを打ったところその下のようにエラー文をだしました。そのエラー解決についてあまりネット上に記載がなかったので、解決方法を記載します
※railsなどのgemのバージョンを下げるには”インストールされている最新のgemのバージョン=反映させたいgemバージョン”とするため、必要なバージョン以上の全てのバージョンをアンインストールする必要があります#2.エラーの原因
コマンドの意味をよく調べずに`gem update –default`というコマンドを打ったところ、local( /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5Wheneverを使用したタイムセール機能の実装(開発環境)
## はじめに
本記事は自分自身の備忘録として書いていますが、同じような実装を考えている方々の参考になればと思います。
また、私と同様、プログラミングを初めたばかりの方々向けに投稿していますので、できるかぎりシンプルに記載していきます!※ runner以外のコマンドや crontab などの説明は本記事では割愛しています。
## 開発環境
Ruby : 2.5.1
Rails : 5.0.7.2
Whenever : 1.0.0## 実現したいこと
ネットショップなどを想定して、出品中の商品全品を定期的に値下げしたい。
また、処理を自動で行いたい。具体的に以下の1, 2を繰り返し実行したい。
1. 毎週末(土日)に全商品が10%オフになる
2. 毎月曜日に元値に戻す## 実装の流れ
よくある、「週末は10%オフのセール!」みたいなやつを Whenever を使用して実装していきます。### 前置き
まず、定期実行をする際に重宝するのが Whenever という Gem です。
タスクに登録して好きなタイミングで自動実行してくれます。
学習コストが低く、私のようRubyで小数点以下の計算をする時に気をつける事
忘れがちなのでメモ
## 問題だったところ
ふと全国の小学生の中からタレントって何人くらいいるだろうなって思ってRubyで計算してみたところ0が結果として出力されたのでちょっと期待と違うなーって思った。
“`
~ irb 17.8m Wed Mar 4 21:49:20 2020
irb(main):001:0> 405/644900
=> 0
“`## 解決策
なんでかなと思ったがRubyには便利なClassオフジェクトがあるので一度確認をしてみる
“`
irb(main):003:0> (405/644900).class
=> Integer
“`想定していたみたいに、小数点以下の割り算をする場合はデータ型をFloatにしてあげないといけないのんでこのように変更
“`
irb(main):005:0> 405/644900.to_f
=> 0.0006280043417584122
“`こうする事で浮動小終点の計算ができる
##
関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた