¿Por qué recibo un error sin método en mi aplicación Rails?
-
28-10-2019 - |
Pregunta
Sé que soy un novato en esto y que no soy digno, pero ¿alguien podría explicarme por qué recibo un error sin método? Esto es lo que hice. Generé una nueva migración para mi base de datos en mi aplicación Rails existente, y la migración se llama "perfil". Ejecuté DB: migrar y luego procedí a editar mi formulario anterior "new.html.erb". El código se ve así:
class CreateProfiles < ActiveRecord::Migration
def self.up
create_table :profiles do |t|
t.string :major
t.string :year
t.string :books_sell
t.string :books_buy
t.string :facebook
t.string :restaurants
t.string :interests
t.timestamps
end
add_index :profiles, :major
add_index :profiles, :year
add_index :profiles, :books_sell
add_index :profiles, :books_buy
add_index :profiles, :facebook
add_index :profiles, :restaurants
add_index :profiles, :interests
end
def self.down
drop_table :profiles
end
end
Básicamente, estoy agregando una sección de perfil a mi aplicación, pero estoy obteniendo esto:
undefined method `major' for #<User:0x00000100b6e030>
Extracted source (around line #23):
20: </div>
21: <div class="field">
22: <%= f.label :"major" %><br />
23: <%= f.text_field :major %>
24: </div>
Este es mi archivo de vistas/usuarios/new.hmtl.erb:
<h1>Sign up</h1>
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Confirmation" %><br />
<%= f.password_field :password_confirmation %>
</div>
<div class="field">
<%= f.label :"year" %><br />
<%= f.text_field :year %>
</div>
<div class="field">
<%= f.label :"major" %><br />
<%= f.text_field :major %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
¿Qué falta?
Solución
El problema aquí era que anteriormente tenía una vista de formulario completada bajo el modelo de usuario. Quería acumular ese formulario, así que creé una nueva migración llamada Perfil. Hice esto porque no pude revertir manualmente mi migración del modelo de usuario y simplemente agregar cuerdas y columnas.
Sin embargo, agregar campos de texto del modelo de perfil en el modelo de usuario plantea un error.
Lo que hice fue que creé un Add_xxx_to_yyy
migración que me permitió agregar columnas a una migración creada previamente sin ningún problema. solía rails generate migration Add_profile_to_User
con los subrayadores porque estoy en Rails 3.0 (no funcionó cuando lo hice Addprofiletouser
). Et voilà!
Otros consejos
Has pegado tu migración por Profile
modelo. Y supongo que en tu @user
variable tiene una nueva instancia de User
modelo.
Y dado que no hay método ni atributo major
Definido para su usuario, verá la queja "Método indefinido ..."