yosaku_ibs
@yosaku_ibs

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Rails】rails console上における「<<」の意味

Q&A

Closed

解決したいこと

下記ソースコードの上から6行目にありますirb(main):005:0> publisher.books <<というコードの<<という記号はなにを表しているのでしょうか?
また、コンソール上に<<は入力する必要があるのでしょうか?

ソースコード

% bin/rails c
irb(main):001:0> pubilsher = Publisher.create(
irb(main):002:1* name: "Gihyoi nc.",
irb(main):003:1* address: "lchigaya",
irb(main):004:1* )
irb(main):005:0> publisher.books <<
Book.create(
irb(main):006:1* name: "Book l",
irb(main):007:1* pubilshed_on: Time.current,
irb(main):008:1* price: l0 00,
irb(main):009:1* )

#ソースコードは「パーフェクト Ruby on Rails」のソースコードの一部です。


自分で試したこと

検索しましたが解決につながるヒントにたどり着けませんでした。

以上、お手数ではございますが
もしご存知の方がいらっしゃいましたら
ご教示の程よろしくお願い申し上げます。

0

1Answer

Books.create(name: "Book l", 略) で作ったオブジェクトを、配列風のオブジェクト1 publisher.books の末尾に追加しています。

以下に示す Array の << メソッド2と同じ働きをします。

ary = [1, 2, 3]
ary << 4
ary == [1, 2, 3, 4]

コンソールには << も入力してください。

  1. ActiveRecord::Associations::CollectionProxy のサブクラスです。 Array と同じメソッドを多く備えていてほとんど Array のように使えますが、 Array のサブクラスではありません。

  2. プログラミング言語の一般的な感覚でいうと << は2項演算子ですが、 Ruby では2項演算子は左辺値のメソッド呼び出しと同等です。たとえば 1 + 2 は、 1+ メソッドに引数 2 を渡しています。

0Like

Comments

  1. @yosaku_ibs

    Questioner

    @uasi様

    いつも大変お世話になっております。
    ご回答下さり誠にありがとうございます。

    ・配列風オブジェクトとはなんでしょうか?
    ・ソースコードをrails console上で実行すると以下のエラーが発生します。
    これはどのように対処すれば良いでしょうか?

    Traceback (most recent call last):
    1: from (irb):5
    SyntaxError (略: unterminated string meets end of file)

    略: syntax error, unexpected end-of-input, expecting ')'

    お手数おかけし申し訳ございませんが
    ご教示お願い致します。
  2. > ・配列風オブジェクトとはなんでしょうか?
    そういった用語や定義があるわけではなく、 publisher.books が複数の値を格納できるオブジェクトで、配列と同じようなメソッドをいくつか持っているという意味で言いました。

    > ・ソースコードをrails console上で実行すると以下のエラーが発生します。
    どこかで入力を間違えています。
    また質問のコードでは price: l0 00 (小文字エル、ゼロ、スペース、ゼロ、ゼロ)になっていますが、これはおそらくprice: 1000(数字の千)の間違いです。
  3. @yosaku_ibs

    Questioner

    @uasi様

    いつも大変お世話になっております。
    無事解決することができました!
    いつも丁寧なご説明とご回答ありがとうございます。

    ありがとうございました。

Your answer might help someone💌