Ruby on Rails生成模型field:type-field:type的选项是什么?


308

我试图生成一个新模型,却忘记了引用另一个模型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模型标题主体:文本tracking_id:整数:uniq”中一样。我找不到这些的文档。还有吗?
Kangur 2013年

11
rails generate model --help
丹尼斯

1
使用版本控件将为您提供一种回滚所有生成文件的简便方法。而且,如果问题出在数据库中……好吧,您始终可以执行db:schema:load
Hector Ordonez

1
好吧,它已经被看过14万次,
到目前为止,已有

Answers:


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

请参阅表定义部分。


13
嗯... 在您提供的链接中未提及:reference或未:references在您的答案中如何将其传递给生成器的说明?!?
Meltemi 2010年

53
那根本无法回答问题。
MikeEL 2011年

1
选择它作为答案,但知道:references也是一个选择。
Meltemi

14
是否有一些文档实际上定义了这些列类型?例如,stringtext有何不同?
Grant Birchmeier

3
@的用法uniq和使用index后缀(以及所有类型)记录了@Kangur rails generate model。运行rails g model以查看用法文档。
丹尼斯

188

要创建引用另一个模型的模型,请使用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生成器的起点是 Rails Ruby on Rails:Rails命令行指南,它指向API文档以获取更多有关可用字段类型的信息。


4
评论稍有过时,但这是此问题答案。+1
omn​​inonsense 2011年

7

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

我也觉得这些指南很难使用。易于理解,但很难找到我想要的东西。

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

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


3

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

写:

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

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


等待?!?什么?我一直大写我的模特名字!您看到什么“问题”?
Meltemi 2012年

2
我说的不是您的模型的名称,而是“模型”的名称。我试图创建一个像这样的模型:rails g Model产品标题:string并得到:找不到生成器Model。所以我这样尝试:rails g model产品标题:string,它起作用了。
维克多·奥古斯托

1
啊。没有遇到b4。好提示!
Meltemi 2012年

2
(不是模型名称是问题,而是model指发电机的字眼。rails g model Product …没关系。)
Asherah 2014年


0

在ROR中创建引用其他模型很简单。

rails g model项目名称:字符串描述:文本产品:引用

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


0

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

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

句法:

field_type:data_type

0

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

def new
 @project = Project.new
end

我的表格如下所示:

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

那是完全正确的,所以我不知道如何解决。

最后,只需添加

url: { projects: :create }

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

为我工作。


这可能是一个很好的答案,但我不知道它是如何涉及约字段类型(任择议定书:integer:string等等)。
Meltemi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.