2011-09-09 11 views
0

私はこれで初心者であり、価値がないと知っていますが、誰かが私に説明してください。ここに私がしたことがあります。私は自分のデータベースのために私の既存のレールアプリに新しいマイグレーションを生成し、マイグレーションは "プロファイル"と呼ばれています。 db:migrateを実行し、以前の "new.html.erb"フォームを編集しました。これは私の意見/ユーザー/ new.hmtl.erbある私のレールアプリにNo Method Errorが表示されるのはなぜですか?

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> 

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 

基本的に、私は私のアプリにプロファイルセクションを追加していますが、私はこれを取得しています:コードは次のようになります。ファイル:

<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 %> 

何が欠けていますか?

+1

あなたのフォームは 'User'モデルのためのもので、あなたのマイグレーションは' Profile'モデルのものでした。これはあなたの問題だろうか? –

+0

@Benoit Garret、私はあなたがその場に出たと思う。私はそれを調べます。 – Tony

+0

真剣に、初心者であることをお詫びしないでください。このスレッドでは初心者の質問について読む:http://meta.stackexchange.com/questions/97327/can-i-ask-newbie-and-basic-questions-in-stack-overflow –

答えて

1

問題は、私は以前にユーザモデルの下で完成したフォームのビューを持っていたということでした。私はそのフォームをタックしたいので、プロファイルという名前の新しい移行を作成しました。これは、ユーザーモデルの移行を手動でロールバックすることができず、文字列と列だけをタックすることができなかったためです。

ただし、ユーザーモデルの下でプロファイルモデルからテキストフィールドを追加するとエラーが発生します。

代わりに私はAdd_xxx_to_yyyの移行を作成しました。この移行によって、以前に作成された移行に問題なく追加することができました。私はレール3.0(私がAddprofiletouserをしたときに動作しませんでした)上にあるので、私はrails generate migration Add_profile_to_Userをアンダースコアと使用しました。 Etvoilà!

+1

「rake db:rollback STEP = n」を使って移行をロールバックすることができます。ここで、nはロールバックしたいマイグレーションの数です。私は、開発時には常にロールバック+マイグレーションを使用して既存のマイグレーションを変更しています。 –

+1

移行の生成に関しては、キャメルケース( 'AddProfileToUser')またはスニークケース(' add_profile_to_user')で移行名を指定することができます。 –

0

Profileモデルの移行をペーストしました。そして、あなたの@user変数には、Userという新しいインスタンスがあると思います。ここ

し、ユーザーに定義されたメソッドや属性majorがないので、あなたが苦情見る「未定義のメソッドを...」

関連する問題