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?

¿Fue útil?

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 ..."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top