当我在 http://guides.rubyonrails.org/active_record_migrations.html 中在线提及 active_record_migrations 时

在以下代码段中:



以下声明是什么意思?

execute <<-SQL
  ALTER TABLE distributors
    ADD CONSTRAINT zipchk
    CHECK (char_length(zipcode) = 5);
SQL

使用 rails db:migrate 运行此迁移,出现错误:
SQLite3::SQLException: near "CONSTRAINT": syntax error:           ALTER TABLE distributors
            ADD CONSTRAINT zipchk
              CHECK (char_length(zipcode) = 5) NO INHERIT;

有关更多详细信息,请参阅 3.9 Using reversible

最佳答案

它被称为 heredoc 并且与迁移、SQL 或其他任何特定内容无关:



由于 ActiveRecord::ConnectionAdapters::DatabaseStatements# execute 接受一个字符串作为参数,您传递的是这个字符串,只是格式正确。

关于ruby-on-rails - Rails 中的 `execute <<-SQL` 是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40394654/

10-12 20:22