Domanda

So che sono un principiante in questo e che non sono degno, ma qualcuno potrebbe per favore spiegarmi perché sto ricevendo un errore senza metodo? Ecco cosa ho fatto. Ho generato una nuova migrazione per il mio database sulla mia app Rails esistente e la migrazione si chiama "Profilo". Ho eseguito DB: Migrate e poi ho proceduto a modificare il mio precedente modulo "New.html.erb". Il codice sembra così:

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

Fondamentalmente, sto aggiungendo una sezione del profilo alla mia app, ma sto ottenendo questo:

   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>

Questo è il mio file di visualizzazioni/utenti/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 %>

Cosa manca?

È stato utile?

Soluzione

Il problema qui era che in precedenza avevo completato una vista del modulo sotto il modello utente. Volevo affrontare quella forma e così ho creato una nuova migrazione denominata profilo. L'ho fatto perché non sono stato in grado di rollback manualmente la mia migrazione del modello utente e attutto su stringhe e colonne.

Tuttavia, l'aggiunta di campi di testo dal modello di profilo sotto il modello utente rappresenta un errore.

Quello che ho fatto invece è stato creato a Add_xxx_to_yyy Migrazione che mi ha permesso di aggiungere colonne a una migrazione precedentemente creata senza problemi. ero solito rails generate migration Add_profile_to_User con i sottoti di sottoti perché sono su Rails 3.0 (non ha funzionato quando l'ho fatto Addprofiletouser). Et voilà!

Altri suggerimenti

Hai incollato la tua migrazione per Profile modello. E immagino che nel tuo @user variabile che hai una nuova istanza di User modello.

E poiché non esiste un metodo o un attributo major Definito per il tuo utente, vedi il reclamo "Metodo indefinito ..."

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top