Perché sto ricevendo un errore senza metodo nella mia app di Rails?
-
28-10-2019 - |
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?
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 ..."