O Ruby on Rails gera o modelo field: type - quais são as opções para field: type?

308

Estou tentando gerar um novo modelo e esquecer a sintaxe para referenciar o ID de outro modelo. Eu mesmo pesquisaria, mas não descobri, entre todos os meus links de documentação do Ruby on Rails, como encontrar a fonte definitiva.

$ rails g model Item name:string description:text(e aqui um reference:productou outro references:product). Mas a melhor pergunta é onde ou como posso procurar esse tipo de bobagem facilmente no futuro?

Nota: Aprendi da maneira mais difícil que, se eu digitar incorretamente uma dessas opções e executar minha migração , o Ruby on Rails estragará totalmente meu banco de dados ... e rake db:rollbackficará impotente contra tais estragos. Tenho certeza de que não estou entendendo nada, mas até que eu entenda ... as informações "detalhadas" retornadas por rails g modelainda me deixam arranhando ...

Meltemi
fonte
E as opções de campo uniq e: index? Como em "corpo do título do modelo do rails g: texto tracking_id: inteiro: uniq". Não consegui encontrar documentação para eles. Existe mais?
Kangur
11
rails generate model --help
Dennis
1
Usar um controle de versão forneceria uma maneira fácil de reverter todos os arquivos gerados. E se o problema é no banco de dados ... bem, você sempre pode fazer db: schema: load
Hector Ordonez
1
bem ele tem sido visto mais de 140K vezes e 243 pessoas a partir de hoje achei que seria útil por isso não é uma pergunta boba, por qualquer meio :)
BKSpurgeon

Respostas:

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

Consulte a seção de definições da tabela .

Paul Schreiber
fonte
13
hmm ... nenhuma menção :referenceou :referencesna sua resposta ou uma explicação de como passá-lo aos geradores no link que você forneceu?!?
Meltemi
53
Isso não responde à pergunta.
precisa saber é o seguinte
1
Selecionou isso como a resposta, mas saiba que : reference também é uma opção.
Meltemi
14
Existe alguma documentação que realmente define esses tipos de coluna? Por exemplo, como stringdifere text?
Grant Birchmeier
3
@Kangur os sufixos uniqe index(e todos os tipos) estão documentados no uso de rails generate model. Execute rails g modelpara ver os documentos de uso.
Dennis
188

Para criar um modelo que faça referência a outro, use o gerador de modelo Ruby on Rails:

$ rails g model wheel car:references

Isso produz app / models / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

E adiciona a seguinte migração:

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

Quando você executa a migração, o seguinte termina em seu 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

Quanto à documentação, um ponto de partida para geradores de rails é Ruby on Rails: um guia para a linha de comando do Rails, que indica a documentação da API para obter mais informações sobre os tipos de campos disponíveis.

Troy
fonte
4
um pouco desatualizado com o comentário, mas esta é a resposta para esta pergunta. +1
omninonsense
7

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

Eu também achei os guias difíceis de usar. Fácil de entender, mas difícil de encontrar o que estou procurando.

Além disso, tenho projetos temporários nos quais executo os rails generatecomandos. Então, depois que os trabalho, eu corro no meu projeto real.

Referência para o código acima: http://guides.rubyonrails.org/getting_started.html#associating-models

B Seven
fonte
3

Lembre-se de não capitalizar seu texto ao escrever este comando. Por exemplo:

Escreva:

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

Não escreva:

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

Pelo menos foi um problema para mim.

Victor Augusto
fonte
Esperar?!? O que? Coloco em maiúscula os nomes dos meus modelos o tempo todo! Que "problemas" você está vendo?
Meltemi
2
Não estou falando do nome do seu modelo, mas do nome 'Modelo'. Tentei criar um modelo como este: rails g Título do produto do modelo: string e consegui: Não foi possível encontrar o modelo do gerador. então tentei assim: rails g model title do produto: string e funcionou.
Victor Augusto
1
Ah Não tinha encontrado esse b4. Boa dica!
21412 Meltemi
2
(Não é o nome do modelo que é o problema, que é a palavra modelcomo referindo-se ao gerador. rails g model Product …Está bem.)
Asherah
0

É muito simples no ROR criar um modelo que faça referência a outros.

modelo de trilhos g Nome do item: descrição da string: produto de texto: referências

Este código adicionará a coluna 'product_id' na tabela Item

chandanjha
fonte
0

Existem muitos tipos de dados que você pode mencionar durante a criação do modelo, alguns exemplos são:

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

sintaxe:

field_type:data_type
chandanjha
fonte
0

Eu tive o mesmo problema, mas meu código era um pouco diferente.

def new
 @project = Project.new
end

E meu formulário ficou assim:

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

Isso foi totalmente correto, então eu não sabia como descobrir.

Por fim, apenas adicionando

url: { projects: :create }

depois de

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

trabalhou para mim.

justinedps26
fonte
Esta pode ser uma boa resposta, mas eu não tenho certeza de como se relaciona com o OP que é sobre os tipos de campo ( :integer, :string, etc ...).
Meltemi