recherche

Maison  >  Questions et réponses  >  le corps du texte

ruby-on-rails - ruby中do关键字的用法

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
create_table :books do |t|

这一句 没有迭代操作 为什么会有 ruby do |t|这句呢 这里的 ruby do |t|到底是什么意思? 求高人解答

PHP中文网PHP中文网2778 Il y a quelques jours1093

répondre à tous(3)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-04-21 11:18:31

    create_table :books do |t|
    

    Pas une itération mais un rappel.

    À propos des rappels dans Ruby :
    http://stackoverflow.com/questions/1677861/how-to-implement-a-callback-in-ruby

    À propos de la migration Rails :
    http://guides.rubyonrails.org/migrations.html

    Si vous avez fait Ajax avec jQuery, vous devriez vivre une expérience similaire à celle-ci :

    $.get("test.php", function(data){ alert("Data Loaded: " + data); 
    
    La valeur de retour de la méthode

    $.get() est le corps de réponse de test.php. Le premier paramètre est l'URL demandée et le deuxième paramètre est la fonction de rappel. Cette fonction accepte le corps de réponse de test.php. valeur des données de paramètre. Et affiché dans une fenêtre contextuelle.

    Vous pouvez comprendre cette déclaration de migration de cette façon.

    # 创建了一个名为books的表
    create_table :books do |t| # t是create_table方法的返回值
        t.column :title, :string, :limit => 32, :null => false # 创建一个列title,字符串,最大长度32,不为null
        t.column :price, :float # 创建一个列price,浮点型
        t.column :subject_id, :integer # 创建一个列subject_id,整形
        t.column :description, :text # 创建一个列description,文本
        t.column :created_at, :timestamp # 创建一个列created_at,时间戳
    end
    

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-21 11:18:31

    Ici : /q/1010000000266437 Je suis déjà revenu et je l'ai déplacé à nouveau ici.

    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

    répondre
    0
  • 大家讲道理

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

    do ... end équivaut à { ... }, qui est un bloc. Les méthodes Ruby peuvent accepter des paramètres de bloc

    .

    répondre
    0
  • Annulerrépondre