ホームページ  >  に質問  >  本文

ruby-on-rails - ruby on rails中出现symbol使用的问题 急求大神解答

  class Books < ActiveRecord::Migration
  def self.up
     create_table :books do |t|
    t.column :title, :string, :limit => 32, :null => false
    t.column :price, :float
    t.column :subject_id, :integer
    t.column :description, :text
    t.column :created_at, :timestamp
     end
  end

  def self.down
    drop_table :books
  end
end

在上面rails迁移代码中:books是用符号代表参数吗? :title :price :string这些都是要干什么捏? 我知道ruby中的符号是用来替代字符串节省内存空间 可是这个情形下依然不知道是什么意思啊 求大神解答

<p class="row collapse">
  <p class="small-3 columns">
    <%= f.label :name, class: "right inline" %>
  </p>
  <p class="small-9 columns"><%= f.text_field :name %></p>
</p>
<p class="row collapse">
  <p class="small-3 columns">
    <%= f.label :price, class: "right inline", title: "Price in USD", data: {tooltip: true} %>
  </p>
  <p class="small-9 columns"><%= f.text_field :price %></p>
</p>
<p class="row collapse">
  <p class="small-9 small-offset-3 columns"><%= f.submit %></p>
</p>

还有在erb中也出现了ruby符号的奇怪用法 f.label :price 是要用:price 去代替f.label吗? 急求大神解答 纠结了几天了

高洛峰高洛峰2762日前618

全員に返信(1)返信します

  • 大家讲道理

    大家讲道理2017-04-21 11:18:35

    ルビの:xxxは記号を表します。

    記号 を文字列に変換することはできますが、それらはまったく同じではありません。

    シンボルは不変です。

    まず第一に、Ruby のすべては object です。各オブジェクトには、メモリ内の物理的な位置を表す一意の object_id があります (ただし、このオブジェクトによって直接アクセスされるわけではありません)。

    ただし、整数などの例外もあります。これは、Ruby のリソース節約方法です。

    リーリー

    これは Ruby の実装です。シンボルは定数と同じです。同じシンボルは同じ object_id を使用します。つまり、メモリ内の位置は同じです。 (定数の object_id は定数の値を直接反映し、処理中にも特別に扱われます)。

    上記のコードに関して。 Ruby の関数呼び出しの括弧は省略できます。たとえば、f.label :price は実際には f.label( :price) になります。 同時に、ハッシュの {} も省略できます。xxx=>xxx,xxx=>xxx または xxx:xxx,xxx:xxx となります。 xxx、...}

    :価格はパラメータの 1 つにすぎません。

    それで登場しました

    リーリー

    このようなコード、 彼が言いたいのは、

    リーリー

    このようにして、フォーム f にラベルを作成します。名前は:name、HTML タグ内のクラスは「right inline」です。

    リーリー

    do|x|...end には特別な意味はなく、{|x|} と同様に、単にブロックを表します。 このコードには反復があり、実際には次のようになります:

    リーリー

    はい、もちろんこれも合法です:

    リーリー

    すると括弧が省略できるので上記のようになります。

    Ruby がそのような関数を実装するには、次のものだけが必要です:

    リーリー

    イテレータのより具体的な使用法については、こちらをご覧ください: http://blog.csdn.net/classwang/article/details/4692856

    返事
    0
  • キャンセル返事