2017-12-05 13 views
-1

私はRails udemyコースを使って作業していましたが、今はルビーの部分に触れています(これは私が経験していないので、これは私には全く新しいものです)。to_jsonのRubyシンボルに混乱がありました

この部分では、基本的にはアクセス権ファイルから「アクセス許可」を取り出して「ユーザーjson」に入れていました。

require 'json' 

class User 


    attr_accessor :email, :name, :permissions 

    def initialize(*args) 
    @email = args[0] 
    @name = args[1] 
    @permissions = User.permissions_from_template 

    end 

    def self.permissions_from_template 
    file = File.read 'user_permissions_template.json' 
    JSON.load(file, nil, symbolize_names: true) 
    end 

    def save 
    self_json = {email: @email, name: @name, permissions: @permissions}.to_json 
    open('users.json', 'a') do |file| 
    file.puts self_json 
    end 
    end 
end 

ユーザーを作成し、それを初期化し、単純なrunner.rbファイルがあり、私の質問はいえないthatsの。基本的に私の質問はself_json = {email: @email, name: @name, permissions: @permissions}.to_json

アイブ氏はto_json APIを読んで、それは十分に簡単ですが、私が見てきたRubyのオブジェクトのすべての例は次のようになります。"strings"

Imが混乱してきて@シンボルを置換除く{:email => @email, :name => @name, :permissions => @permissions}可変タイプ@variable:variableの間

:var => @whatever@変数を使用していたため使用していませんか?

答えて

1

文字列ではなくインスタンス変数から値を取得することとは関係ありません。キーとはシンボルとなります。

旧Rubyは各キー/値のペア

key => value 

例えばと共に、1つのオブジェクトのみリテラル構文を持っていました

"foo"は、文字列キー、 2整数キー、及び :name記号キーである
{ "foo" => "bar", 2 => 4, :name => "value" } 

link_to "Delete", thing, :method => :delete, :data => { :confirm => "Sure?" } 

実際

ためのショートカットです:

しかし、それはその記号キーは、特に機能にキーワードパラメータ(当時の言語から欠落している)の代替として、非常に、非常に頻繁に使用された発見されました

link_to("Delete", thing, { :method => :delete, :data => { :confirm => "Sure?" } }) 
は、この種の構造はそれほど冗長、およびキーワードを使用するなど、より直感的にするために、新しい構文がシンボルであり、キー、

のために特別に、ショートカットとして開発されました
key: value 

は混合ので、私は、このような場合にはお勧めしませんが、したがって、上記のハッシュが

{ "foo" => "bar", 2 => 4, name: "value" } 

(のように記述されている可能性があり、古いけど

同じ
:key => value 

に代わるものです2つのスタイルは一種の嫌なものです。この新しい構文を使用)

は、上記のコマンドはそう書くことができます。

link_to "Delete", thing, method: :delete, data: { confirm: "Sure?" } 

したがって、あなたが書いた場合は絶対に違いはありません

{ :email => @email, :name => @name, :permissions => @permissions } 

または

{ email: @email, name: @name, permissions: @permissions } 

現在、後者のほうが短くて読みやすいので、後者が好ましい。しかし、多くの場合、Ruby-1.9より前のコードでは、古い構文が浮かび上がることがあります。

関連する問題