【问题标题】:Ruby on Rails generates model field:type - what are the options for field:type?Ruby on Rails 生成模型 field:type - field:type 的选项有哪些?
【发布时间】:2011-05-22 00:30:56
【问题描述】:

我正在尝试生成一个新模型,但忘记了引用另一个模型 ID 的语法。我会自己查找,但在我所有的 Ruby on Rails 文档链接中,我还没有弄清楚如何找到最终的来源。

$ rails g model Item name:string description:text(此处为reference:productreferences:product)。但更好的问题是在哪里如何我以后可以轻松地寻找这种愚蠢?

注意:我学到了一个艰难的方法,如果我输入错误其中一个选项并运行我的迁移,那么 Ruby on Rails 将完全搞砸我的数据库......而rake db:rollback 无能为力反对这样的搞砸。我确定我只是不理解某些东西,但在我理解之前......rails g model 返回的“详细”信息仍然让我抓狂......

【问题讨论】:

  • :uniq 和 :index 字段选项呢?就像在“rails g model title body:text tracking_id:integer:uniq”中一样。我找不到那些文档。还有吗?
  • rails generate model --help
  • 使用版本控制将为您提供一种简单的方法来回滚任何生成的文件。如果问题出在数据库中......好吧,你总是可以做 db:schema:load

标签: ruby-on-rails generator rails-activerecord


【解决方案1】:
:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp,
:time, :date, :binary, :boolean, :references

请参阅table definitions 部分。

【讨论】:

  • hmm...在您的回答中没有提及:reference:references 在您提供的链接中说明如何将其传递给生成器?!?
  • 这根本不能回答问题。
  • 选择这个作为答案,但知道 :references 也是一个选项。
  • 是否有一些文档实际上定义这些列类型?例如,stringtext 有何不同?
  • @Kangur uniqindex 后缀(以及所有类型)记录在 rails generate model 的用法中。运行rails g model 以查看使用文档。
【解决方案2】:

要创建引用另一个模型的模型,请使用 Ruby on Rails 模型生成器:

$ rails g model wheel car:references

生成 app/models/wheel.rb

class Wheel < ActiveRecord::Base
  belongs_to :car
end

并添加以下迁移:

class CreateWheels < ActiveRecord::Migration
  def self.up
    create_table :wheels do |t|
      t.references :car

      t.timestamps
    end
  end

  def self.down
    drop_table :wheels
  end
end

当您运行迁移时,以下内容将最终出现在您的 db/schema.rb 中:

$ rake db:migrate

create_table "wheels", :force => true do |t|
  t.integer  "car_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

至于文档,rails 生成器的起点是Ruby on Rails: A Guide to The Rails Command Line,它指向API Documentation 以了解有关可用字段类型的更多信息。

【讨论】:

  • 评论有点过时了,但这是这个问题的答案。 +1
【解决方案3】:

$ rails g model Item name:string description:text product:references

我也发现这些指南很难使用。容易理解,但很难找到我要找的东西。

另外,我有一些运行rails generate 命令的临时项目。然后,一旦我让它们工作,我就会在我的真实项目中运行它。

以上代码参考:http://guides.rubyonrails.org/getting_started.html#associating-models

【讨论】:

    【解决方案4】:

    记住在编写此命令时不要将文本大写。 例如:

    写:

    rails g model product title:string description:text image_url:string price:decimal
    

    不要写:

    rails g Model product title:string description:text image_url:string price:decimal
    

    至少这对我来说是个问题。

    【讨论】:

    • 等等?!?什么?我一直把我的型号名称大写!你看到了什么“问题”?
    • 我不是在谈论您的模型的名称,而是名称“模型”。我试图创建一个这样的模型:rails g 模型产品标题:字符串并得到:找不到生成器模型。所以我这样尝试:rails g model product title:string 并且它起作用了。
    • 啊。没遇到过那个b4。好提示!
    • (问题不是型号名称,而是 model 指代发电机。rails g model Product … 很好。)
    【解决方案5】:

    http://guides.rubyonrails.org 应该是一个不错的站点,如果您想了解 Ruby on Rails 中的基本内容。

    以下是生成模型时关联模型的链接: http://guides.rubyonrails.org/getting_started.html#associating-models

    【讨论】:

      【解决方案6】:

      在 ROR 中创建引用其他模型的模型非常简单。

      rails g模型项目名称:字符串描述:文本产品:参考

      此代码将在 Item 表中添加“product_id”列

      【讨论】:

        【解决方案7】:

        在创建模型时可以提及很多数据类型,例如:

        :primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :references
        

        语法:

        field_type:data_type
        

        【讨论】:

          【解决方案8】:

          我遇到了同样的问题,但我的代码有点不同。

          def new
           @project = Project.new
          end
          

          我的表格是这样的:

          <%= form_for @project do |f| %>
               and so on....
          <% end %>
          

          这完全正确,所以我不知道如何弄清楚。

          最后,添加

          url: { projects: :create }
          
          

          之后

          <%= form-for @project ...%>
          
          

          为我工作。

          【讨论】:

          • 这可能是一个很好的答案,但我不确定它与关于字段类型(:integer:string 等)的 OP 有何关系。
          猜你喜欢
          • 2013-04-18
          • 2014-08-23
          • 1970-01-01
          • 2013-04-23
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多