インクリボンとタイプライター

セーブがしたいんです…

erb2slimを実行時にno implicit conversionエラーが出る

やりたいこと

 index.html.erbをslimに変換したい。

 

gem

 gem 'slim-rails'

 gem 'html2slim'

 

コマンド

 erb2slim

 

エラー文

 TypeError: no implicit conversion of IO into String

   Use --trace for backtrace.

 

IOを文字列に変換することはできない、という意味のエラーだと理解。

 

--traceを実行

 /Users/ほげほげ/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/html2slim-0.2.0/lib/html2slim/converter.rb:17:in `open': no implicit conversion of IO into String (TypeError)

 

 converter.rbのファイルを開こうとしてエラー?

 ファイルの中まで掘ってる時間がないので、一旦ここまで。もう手動で換える。

 でもくやしいので、詳しい方教えてください!

 

ruby silver 勉強記録 (6日目)

・日付

%Y :4桁の西暦

%y:2桁の西暦

%m:月

%d:日

%H:時刻

%M:分

%S:秒

 

・ハッシュ

インスタンスメソッド

clear : ハッシュを空にする。

fetch : キーに対応する値を取り出し、キーがなければ指定の値を返す。

invert : キーを値に、値をキーにする。

 

・%、%s

%: ダブルクオートで囲う場合と同等。シングルクオートやダブルクオートのエスケープが不要になる。後述の%q()と違い、変数・定数の展開もできる。

str = %(Programming language "Ruby")
puts str
# => Programming language "Ruby"

 

%s: シンボルにする。式の展開はされない。

sym = %s(Ruby)
p sym
# => :Ruby

 

qiita.com

 

 

・contact

 concatメソッドは、配列arrayの末尾に引数の配列other_arrayを結合します。

fruits = ["apple", "orange", "banana"]
fruits.concat(["kiwi", "strawberry"])
p fruits
["apple", "orange", "banana", "kiwi", "strawberry"]

concat (Array) - Rubyリファレンス

 

・chop

 

str.chop

chopメソッドは、文字列の末尾から1文字を取り除いた新しい文字列を返します。末尾が"\r\n"で終わっている場合だけは、"\r\n"の2文字を取り除きます。

s = "hello"
puts s.chop
hell

 

・ヒアドキュメントとは

Ruby

Rubyにもヒアドキュメントが存在し、それは <<識別子 を含む行の次の行から識別子だけの行の直前までを文字列とする行指向のリテラルである[6]。例えば、

print <<EOS      # 識別子 EOS までがリテラルになる
  the string
  next line
EOS

のように書くと、以下と同じように出力される。

print "  the string\n  next line\n"

ヒアドキュメント - Wikipedia

 

・モジュールとは

まずモジュールとは何かについて見ておきましょう。モジュールは次のようなものです。

module モジュール名

end

モジュールは「module」から始まり「end」で終わりとなります。そしてモジュールにはモジュール名を指定します。

クラスの中でモジュールを利用できるようにするにはクラスの中に次のように記述します。

include モジュール名

インクルードされたモジュールはクラス内のインスタンスメソッドと同じように実行する事が出来ます。

www.rubylife.jp

 

 

20170608 ruby メモ

obj.is_a?(klass)
obj.kind_of?(klass)

is_a?メソッドまたはkind_of?メソッドは、レシーバのオブジェクトが引数klassクラスのインスタンスであればtrue、そうでなければfalseを返します。

instance_of?メソッドとは違い、レシーバが属するクラスだけでなく、レシーバが属するクラスの親クラスやインクルードしているモジュールをklassに指定してもtrueが返ります。

次の例では、配列arrArrayクラスのインスタンスですが、ArrayクラスはObjectを親クラスとし、Enumerableモジュールをインクルードしているので、ArrayObjectEnumerableのどれをkind_of?に渡してもtrueになります。

arr = [1, 2, 3]
puts arr.kind_of?(Hash)
puts arr.kind_of?(Array)
puts arr.kind_of?(Object)
puts arr.kind_of?(Enumerable)
false
true
true
true

 

Rubyスクリプトで目にする以下のイディオムは、左辺が未定義または偽なら右辺の値を代入するという意味だ。このイディオムは変数の初期化で良く用いられる。

a ||= true

Rubyの||=というイディオムは左辺が未定義または偽なら代入の意味 -- ぺけみさお

 

sym.to_sym

to_symメソッドは、レシーバのシンボル自身を返します。

sym = :message
p sym.to_sym
:message

 

ref.xaio.jp

 

build

newメソッドのAlias
モデルオブジェクトを生成する。
保存はまだされていないため、saveメソッドなどを使って保存する。
生成と同時に保存したい場合は、createメソッドを使用する。

使い方

モデル.build([属性])

引数なし
person.pets.build
# => #<Pet id: nil, name: nil, person_id: 1>

build - リファレンス - - Railsドキュメント

 

pluck

任意のカラムの配列を取得(pluck)

説明

任意のカラムの配列を取得する

使い方

モデル.pluck(カラム名)

Person.pluck(:id)
# SELECT people.id FROM people
# => [1, 2, 3]

 

 

 

 

 

ruby silver 勉強記録 (7日目)

・?A

 「?」に一文字足すと、その文字自身を一文字だけ含む文字列オブジェクトを返す。

 p ?A

# => "A"

 

・配列

位置と数

array[index, length]

引数に整数2つ(indexlength)を指定したときは、indexの位置からlength個の要素を取り出して、配列で返します。indexが範囲外のときはnilを返します。また、indexが要素の数と同じときは空の配列を返します。

引数indexにマイナスの値を指定したときは、配列の末尾から数えます(-1が後ろから1番目、-2が後ろから2番目、...)。

animals = ["dog", "cat", "mouse", "rabbit", "horse"]
p animals[1, 3]   # 2番目から3個
p animals[-3, 2]  # 末尾から3番目から2個
p animals[5, 3]   # index == 要素数
["cat", "mouse", "rabbit"]
["mouse", "rabbit"]
[]

範囲

array[range]

引数に範囲rangeを指定すると、その範囲の位置から要素を取り出して、配列で返します。rangeが配列の範囲外のときはnilを返します。また、rangeの開始位置が要素の数と同じときは空の配列を返します。

rangeにマイナスの値を指定したときは、配列の末尾から数えます(-1が後ろから1番目、-2が後ろから2番目、...)。

animals = ["dog", "cat", "mouse", "rabbit", "horse"]
p animals[2..4]    # 3番目から5番目まで
p animals[2...4]   # 3番目から5番目まで、5番目は含まない
p animals[-4..-2]  # 末尾から4番目..末尾から2番目まで 
["mouse", "rabbit", "horse"]
["mouse", "rabbit"]
["cat", "mouse", "rabbit"]

ref.xaio.jp

 

・join

joinメソッドは、配列の各要素を文字列に変換し、引数sepを区切り文字として結合した文字列を返します。

引数のデフォルト値は組み込み変数$,の値です。$,の初期値はnilなので、引数を省略すると区切り文字なしで要素を結合した文字列になります。

arr = ["hello", "world", 123]
puts arr.join(", ")
puts arr.join
hello, world, 123
helloworld123

配列の中に配列が含まれるときは、平坦化して結合します。

arr = [1, 2, 3, [4, 5], [6, [7, 8]]]
puts arr.join(", ")
1, 2, 3, 4, 5, 6, 7, 8

ref.xaio.jp

 

正規表現

 /で囲む。

 /;

 

・||

 a||b

  trueだった方を返す。

 

 

 

 

ruby silver 勉強記録 (6日目)

・日付

%Y :4桁の西暦

%y:2桁の西暦

%m:月

%d:日

%H:時刻

%M:分

%S:秒

 

・ハッシュ

インスタンスメソッド

clear : ハッシュを空にする。

fetch : キーに対応する値を取り出し、キーがなければ指定の値を返す。

invert : キーを値に、値をキーにする。

 

・%、%s

%: ダブルクオートで囲う場合と同等。シングルクオートやダブルクオートのエスケープが不要になる。後述の%q()と違い、変数・定数の展開もできる。

str = %(Programming language "Ruby")
puts str
# => Programming language "Ruby"

 

%s: シンボルにする。式の展開はされない。

sym = %s(Ruby)
p sym
# => :Ruby

 

qiita.com

 

 

・contact

 concatメソッドは、配列arrayの末尾に引数の配列other_arrayを結合します。

fruits = ["apple", "orange", "banana"]
fruits.concat(["kiwi", "strawberry"])
p fruits
["apple", "orange", "banana", "kiwi", "strawberry"]

concat (Array) - Rubyリファレンス

 

・chop

 

str.chop

chopメソッドは、文字列の末尾から1文字を取り除いた新しい文字列を返します。末尾が"\r\n"で終わっている場合だけは、"\r\n"の2文字を取り除きます。

s = "hello"
puts s.chop
hell

 

・ヒアドキュメントとは

Ruby

Rubyにもヒアドキュメントが存在し、それは <<識別子 を含む行の次の行から識別子だけの行の直前までを文字列とする行指向のリテラルである[6]。例えば、

print <<EOS      # 識別子 EOS までがリテラルになる
  the string
  next line
EOS

のように書くと、以下と同じように出力される。

print "  the string\n  next line\n"

ヒアドキュメント - Wikipedia

 

・モジュールとは

まずモジュールとは何かについて見ておきましょう。モジュールは次のようなものです。

module モジュール名

end

モジュールは「module」から始まり「end」で終わりとなります。そしてモジュールにはモジュール名を指定します。

クラスの中でモジュールを利用できるようにするにはクラスの中に次のように記述します。

include モジュール名

インクルードされたモジュールはクラス内のインスタンスメソッドと同じように実行する事が出来ます。

www.rubylife.jp

 

 

ruby silver 勉強記録 (5日目)

 

・IOクラス

 

IOクラスとは
プログラムの外部とデータのやりとりをするための機能として入力(Input)と出力(Output)を提供するのが、IOクラスです

| たのしいRuby P339

 

qiita.com

 

・.read

.read(num)で対象の何文字目かを読み込む

 

・.seek

 

ファイルポインタを移動する

  • io.seek(offset, whence)

引数offsetには位置を整数で指定する。
引数whenceにはoffsetをどう評価するかを指定する。
■ whenceの値
- IO::SEEK_SET : offsetで指定された位置にファイルポインタを移動する
- IO::SEEK_CUR : offsetを現在の相対位置とみなしてファイルポインタを移動する
- IO::SEEK_END : offsetをファイルの末尾からの相対位置としてファイルポインタを移動する

qiita.com

 

・ハッシュについて

 {}で生成する。

 invert

hash.invert

invertメソッドは、キーを値に、値をキーにしたハッシュを作成します。レシーバの各キーと値を「値 => キー」として新しいハッシュに集めて返します。

:a => 1, :b => 1」のように別のキーが同じ値を持っているときは、いずれかのキーが1つだけ残ります。

status = { "Not Found" => 404, "Forbidden" => 403, "OK" => 200,
           "Service Unavailable" => 503, "Success" => 200 }
p status.invert
{403=>"Forbidden", 200=>"OK", 503=>"Service Unavailable", 404=>"Not Found"} (Ruby 1.8)

Ruby 1.9のハッシュには順序があるので、別のキーが同じ値を持っているときは、後ろのほうのキーが残ります。

{404=>"Not Found", 403=>"Forbidden", 200=>"Success", 503=>"Service Unavailable"} (Ruby 1.9)

ref.xaio.jp

・delete

 キーを指定して、キーと値の組みを削除する

・fetch

 fetchメソッドは、ハッシュから引数で指定したキーの値を取り出して返します。[]メソッドと機能は同じですが、キーが存在しないときの動作が異なります。

hash.fetch(key)

 

・clear

hash.clear

clearメソッドは、キーと値をすべて削除し、ハッシュを空にします。

 

railsとswiftを連携させる練習

参考

github.com

 

詰まり

以下のコードをどこに挟むのかがわからず。

TweetsViewController.swiftに挟むと以下のエラー。

エラーメッセージ

Method does not override any method from its super class

	override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tweets.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

        let tweet = tweets[indexPath.row]
        cell.textLabel?.text = tweet.title

        return cell
    }

 

 詳しい方、いらっしゃいましたら教えてくださいまし。