Ho un modello chiamato Categoria che assomiglia a questo:Accesso oggetto padre attributo di oggetto del bambino in Rails
class Category < ActiveRecord::Base
has_many :categories
belongs_to :category,:foreign_key => "parent_id"
end
Ho una visione che mostra tutte le categorie con alcuni dei loro attributi. Posso accedere a category.parent_id
, ma mi piacerebbe essere in grado di fare qualcosa come category.parent_name
.
Posso vedere me stesso creando un metodo di modello per recuperare tutte le categorie e riempire la raccolta con il nome genitore corrispondente di ogni categoria, ma mi chiedo se c'è comunque modo di farlo facilmente.
EDIT: ho modificato il modello di avere in questo modo:
class Category < ActiveRecord::Base
has_many :children, :class_name => 'Category', :foreign_key => 'parent_id'
belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id'
end
La migrazione di creare le categorie della tabella è come questo:
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.string :name
t.text :description
t.integer :parent_id
t.timestamps
end
end
end
Tuttavia quando passo una categoria oggetto a una vista Non riesco ad accedere ai suoi attributi genitore facendo category.parent.name
- Facendo un inspect
di quell'oggetto mi dà:
<Category id: 2, name: "Test 2", description: "Prova 2", parent_id: 1, created_at: "2012-01-17 19:28:33", updated_at: "2012-01-17 19:28:33">
E se faccio un ispezionare di category.parent
ottengo questo:
#<Category id: 1, name: "Prova", description: "Test", parent_id: nil, created_at: "2012-01-17 19:28:17", updated_at: "2012-01-17 19:28:17">
Tuttavia, se provo a fare category.parent.name
ricevo il seguente errore:
undefined method `name' for nil:NilClass
EDIT2: stavo cercando di accedere a un genitore che era nullo prima dell'oggetto che ho menzionato sopra. In questo modo:
category.parent.try(:name)
come suggerito da Michael Irwin in una delle risposte risolto.
davidb grazie per la risposta. Perché dichiarate due chiavi esterne con lo stesso nome nell'associazione has_many e belongs_to? – Nobita
La sua chiave estranea ma vista da due lati diversi ... – davidb
Ho spiegato un po 'più avanti il mio problema usando le modifiche che hai suggerito. Vediamo se capisco cosa sto facendo male ... – Nobita