Rumah > Soal Jawab > teks badan
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吗? 急求大神解答 纠结了几天了
大家讲道理2017-04-21 11:18:35
:xxx dalam delima mewakili simbol.
Anda boleh memahami simbol ke dalam rentetan , tetapi mereka tidak betul-betul sama.
simbol tidak berubah.
Pertama sekali, segala-galanya dalam ruby adalah objek, dan setiap objek mempunyai object_id unik yang mewakili lokasi fizikalnya dalam ingatan (tetapi ia tidak boleh diakses secara langsung oleh objek ini).
Walau bagaimanapun, terdapat beberapa pengecualian, seperti integer Anda akan mendapati bahawa object_id bagi integer yang sama adalah sama. Ini adalah cara Ruby untuk menyimpan sumber.
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);
}
Ini ialah pelaksanaan Simbol adalah sama dengan pemalar Simbol yang sama menggunakan object_id yang sama, iaitu lokasi mereka dalam ingatan adalah sama. (Objek_id pemalar secara langsung mencerminkan nilai pemalar, dan juga dirawat secara khusus semasa pemprosesan).
Bagi kod di atas. Tanda kurung untuk panggilan fungsi dalam Ruby boleh diabaikan Contohnya, f.label :price sebenarnya adalah f.label( :price) Pada masa yang sama, {} cincangan juga boleh diabaikan Ini adalah yang anda lihat: xxx=>xxx,xxx=>xxx atau xxx:xxx,xxx:xxx. xxx, ...}
:harga hanyalah salah satu daripada parameternya.
Jadi ia kelihatan
f.label :name, class: "right inline"
Kod seperti ini, Apa yang dia maksudkan ialah,
f.label (:name, {:class => "right inline"})
Dengan cara ini, dia akan membuat label di bawah borang f, namanya ialah: nama dan kelas dalam teg html ialah "sebaris kanan".
create_table :books do |t|
do|x|...akhir tidak mempunyai makna istimewa, sama seperti {|x|}, ia hanya mewakili satu blok. Terdapat lelaran dalam kod ini, ia sebenarnya serupa dengan:
File.open("xxx","xxx") do |f|
f.write(...)
end
, sudah tentu ini juga sah:
File.open("xxx","xxx") { |f|
f.write(...)
}
Kemudian ia menjadi seperti di atas kerana kurungan boleh ditinggalkan.
Untuk ruby melaksanakan fungsi sedemikian, anda hanya perlu:
class Somethings
#...
def create_table(name)
# 为创建这个表做一些准备……
# ...
yield @table
# 创建这个表
# ...
end
end
Untuk penggunaan iterator yang lebih khusus, anda boleh membaca ini: http://blog.csdn.net/classwang/article/details/4692856