1

まず第一に、これは私の最初の Rails アプリケーションなので、甘やかしてください... http://guides.rubyonrails.org/association_basics.htmlにある関連付けに関する Rails ガイドを読んでから、自分のプロジェクトのコーディングを開始しました。私の問題は、@project.user が常に nil のように見えるため、@project.user.email のようなことができないことです。これはすべてのオブジェクトで発生します。@user.role.name も「nil:NilClass の未定義メソッド」をスローします。モデルの定義で何か間違ったことをしていると確信していますが、それが何であるかはわかりません。私はあなたの助けに感謝します。ありがとう。

   class Role < ActiveRecord::Base
      has_many :users
      attr_accessible :name
   end

   class User < ActiveRecord::Base
      belongs_to :role
      has_many :projects
      attr_accessible :email, :password, :password_confirmation, :role_id, :role  
   end

   class Project < ActiveRecord::Base
      belongs_to :user
      belongs_to :project_type
      attr_accessible :id, :project_type_id, :title, :description  
   end

   class Project_Type < ActiveRecord::Base
      has_many :projects
      attr_accessible :name
   end

たとえば、私が行っているプロジェクトのインデックス ビュー (HAML) は次のようになります。

   %td= proyecto.user.email

これはうまくいきません。でも、

   %td= proyecto.user_id

正常に動作します。

4

1 に答える 1

2

新しいプロジェクトを作成すると、移行で何らかのタイプのデフォルトを設定しない限り、すべての関連付けがデフォルトで nil になります。そこでできることがいくつかあります。

まず、ユーザーを手動で設定できます。

@user = User.find(5)
@project = Project.new
@project.user = @user

さらに、ユーザーから新しいプロジェクトを構築できます。buildメソッドは関連付けから自動的に追加されますhas_many

@user = User.find(5)
@project = @user.projects.build

これで、ID 5 を持つユーザーに関連付けられたプロジェクトが含まれます@project。また、関連付けが何であるかを Rails に伝える必要があります。そうしないと、関連付けが機能しません。

于 2013-02-06T20:21:25.833 に答える