Pourquoi suis-je recevoir une méthode Pas d'erreur dans mon application rails?
-
28-10-2019 - |
Question
Je sais que je suis un débutant à ce et que je ne suis pas digne, mais quelqu'un pourrait me s'il vous plaît expliquer pourquoi je reçois une méthode Pas d'erreur? Voici ce que je l'ai fait. Je généré une nouvelle migration pour ma base de données sur mon application rails existants et la migration est appelée « Profil ». Je courais db: migrate puis à modifier ma continuai précédente sous forme de « new.html.erb ». Le code ressemble à ceci:
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
En fait, je suis d'ajouter une section de profil sur mon application, mais je reçois ceci:
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>
Ceci est mon point de vue / utilisateurs / fichier 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'est-ce qui manque?
La solution
Le problème ici est que j'avais déjà vue formulaire dûment rempli selon le modèle de l'utilisateur. Je voulais virer de bord sur cette forme et je créé un nouveau profil nommé de migration. Je l'ai fait parce que je n'étais pas en mesure de restaurer manuellement ma migration du modèle utilisateur et juste amure sur les chaînes et les colonnes.
Cependant, l'ajout de champs de texte à partir du modèle de profil selon le modèle de l'utilisateur pose une erreur.
Ce que je n'étais à la place que je créé une migration Add_xxx_to_yyy
qui m'a permis d'ajouter des colonnes sur une migration précédemment créée sans aucun problème. Je rails generate migration Add_profile_to_User
avec les underscores parce que je suis sur des rails 3.0 (il ne fonctionne pas quand je l'ai Addprofiletouser
). Et voilà!
Autres conseils
Vous avez collé votre migration pour le modèle Profile
. Et je suppose que dans votre variable @user
vous avez nouvelle instance de modèle User
.
Et puisqu'il n'y a pas de méthode ou major
attribut défini pour votre utilisateur, vous voyez la plainte « méthode non définie ... »