ruby-on-rails - ruby on rails中出现symbol使用的问题 急求大神解答
高洛峰
高洛峰 2017-04-21 11:16:35
0
1
657
  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吗? 急求大神解答 纠结了几天了

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(1)
大家讲道理

:xxx en rubis représente un symbole.

Vous pouvez comprendre le symbole en chaîne , mais ils ne sont pas exactement les mêmes.

le symbole est inchangé.

Tout d'abord, tout dans Ruby ​​est un objet, et chaque objet a un object_id unique qui représente son emplacement physique en mémoire (mais il n'est pas directement accessible à cet objet).

Cependant, il existe quelques exceptions, comme les entiers. Vous constaterez que l'object_id du même entier est le même. C'est la façon dont Ruby économise les ressources.


VALUE
rb_obj_id(VALUE obj)
{

   if (TYPE(obj) == T_SYMBOL) {
       return (SYM2ID(obj) * sizeof(RVALUE) + (4 << 2)) | FIXNUM_FLAG;
   }
   if (SPECIAL_CONST_P(obj)) {
       return LONG2NUM((long)obj);
   }
   return (VALUE)((long)obj|FIXNUM_FLAG);
}

Il s'agit de l'implémentation de Ruby. Les symboles sont les mêmes que les constantes. Les mêmes symboles utilisent le même object_id, c'est-à-dire que leurs emplacements en mémoire sont les mêmes. (L'object_id d'une constante reflète directement la valeur de la constante et est également traité spécialement lors du traitement).

Comme pour le code ci-dessus. Les parenthèses pour les appels de fonction dans Ruby peuvent être omises. Par exemple, f.label :price est en fait f.label( :price) En même temps, le {} du hachage peut également être omis. Voici ce que vous voyez : xxx=>xxx,xxx=>xxx ou xxx:xxx,xxx:xxx. Ce sont en fait des {:xxx=> xxx, ...>

 : le prix n’est qu’un de ses paramètres.

C'est ainsi qu'il est apparu

 f.label :name, class: "right inline"

Code comme ça, Ce qu'il veut dire, c'est

f.label (:name, {:class => "right inline"})

De cette façon, il créera une étiquette sous forme f, le nom est : name, et la classe dans la balise html est "right inline".

create_table :books do |t|

do|x|...end n'a pas de signification particulière, tout comme {|x|}, il représente simplement un bloc. Il y a une itération dans ce code, c'est en fait similaire à :

File.open("xxx","xxx") do |f|
f.write(...)
end

, bien sûr, c'est aussi légal :

File.open("xxx","xxx") { |f|
  f.write(...)
}

Ensuite, cela devient comme ci-dessus car les parenthèses peuvent être omises.

Pour que Ruby implémente une telle fonction, il vous suffit de :

class Somethings
#...  
  def create_table(name)
    # 为创建这个表做一些准备……
    # ...
    yield @table
    # 创建这个表
    # ...
  end
end

Pour une utilisation plus spécifique des itérateurs, vous pouvez lire ceci : http://blog.csdn.net/classwang/article/details/4692856

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal