2012-07-17 16 views
10

Me estoy poniendo el atributo error desconocido: la ejecución durring user_id de current_user.stories.buildatributo desconocido: USER_ID

class User < ActiveRecord::Base 
    has_many :stories, class_name: 'Story', foreign_key: 'user_id', dependent: :destroy 
    ... 

class Story < ActiveRecord::Base 
    belongs_to :user, class_name: 'User', foreign_key: 'user_id' 
    ... 

schema.rb

create_table "stories", :force => true do |t| 
    t.string "responsible" 
    t.string "descr" 
    t.string "state" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "users", :force => true do |t| 
    t.string "email" 
    t.string "password_digest" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    t.string "name" 
    end 

No contiene 'user_id' campo. ¿Algunas ideas?

Respuesta

1

Debe tener un campo user_id en su tabla stories como a continuación para definir la asociación en sus modelos.

create_table "stories", :force => true do |t| 
    t.integer "user_id" 
    t.string "responsible" 
    t.string "descr" 
    t.string "state" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 
    ... 
end 

Editar

Compruebe la respuesta de Emily para una explicación detallada.

27

Kulbir tiene razón en que necesita definir una columna user_id en su tabla stories, pero no explica la manera de hacerlo.

La forma correcta de hacer ese cambio es crear una nueva migración. Por convención, se debería llamar add_user_id_to_stories y se crearía la siguiente manera (asumiendo que usted está utilizando los carriles 3 +):

rails generate migration add_user_id_to_stories 

Si ejecuta de eso, debería generar realmente una migración que ya contiene el cambio que necesita para hacer, lo que debería ser algo como:

add_column :stories, :user_id, :integer 

como acotación al margen cuando se está siguiendo las convenciones de nomenclatura relativas Rieles asociación, que son, en realidad se puede omitir una gran cantidad de la especificación adicional. En el modelo User, puede especificar solo has_many :stories y en el modelo Story especifique belongs_to :user. Rails asumirá los mismos nombres de clase y claves foráneas que haya especificado.

+0

Gracias por la corrección y una explicación más detallada! +1 –

0

se debe utilizar la nueva sintaxis y pasar el FieldType como símbolo

add_column :stories, :user_id, :integer 
Cuestiones relacionadas