Portanto, tenho uma create_table como esta para Cursos em uma Escola:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
mas eu quero fazer referência a dois outros cursos como:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Posso dizer o seguinte?
t.references :transferrable_as, :as=> :course
ruby-on-rails
associations
migration
o espelho
fonte
fonte
foreign_key
opção na criação da tabela desta forma, surge um erro dizendo que a própria tabela que estou criando não existe ... Portanto, suspeito que ela não seja realmente suportada pela API oficial.index
já foi adicionado às chaves estrangeiras em Rails stackoverflow.com/questions/39769981/…Você pode fazer desta forma:
ou usando
t.belongs_to
como um alias parat.references
Você não pode adicionar
foreign_key: true
a essas duas linhas de referência. Se você deseja marcá-los como chaves estrangeiras no nível do banco de dados, você precisa fazer uma migração com isto:Atualizar
No Rails 5.1 e superior você pode adicionar a chave estrangeira na migração no
create_table
bloco assim:fonte
foreign_key: true
às linhas de referência era o que estava me enganando. Adicionaradd_foreign_key
e especificar o nome da coluna para eles resolveu.schema_plus
gema. Os documentos add_reference do Rails não mencionam as opções a: reference.references:
serve a opção (ao contrário de quet.references
isso não seria relevante apenas no nível do modelo, com as considerações de Foreign_key sendo feitas poradd_foreign_key
?t.references
diz "adicione um campo a esta tabela que é a chave primária de outra tabela." Areferences:
opção informa de qual tabela é uma chave primária (necessária se não estiver clara pelo nome do campo). Aadd_foreign_key
função diz ao banco de dados para impor integridade referencial aqui.add_foreign_key
linhas têm o cuidado de informar ao banco de dados o que é uma chave estrangeira de quê. Oreferences:
parâmetro não está fazendo nada.Eu acho que este tópico tem um jeito diferente mais Rails: Scaffolding ActiveRecord: duas colunas do mesmo tipo de dados
Na migração:
fonte
PG::UndefinedTable: ERROR
ele está tentando adicionar uma restrição de chave estrangeira a uma tabela que não existe.belongs_to
é apenas um apelido parareferences
e tem exatamente a mesma funcionalidade.Como uma resposta adicional a esta pergunta - o modelo deve ter a seguinte linha para completar a associação:
fonte
Acho que não
references
aceita a:as
opção, mas você pode criar suas colunas manualmente ...fonte