2

私は数日前にRailsを学び始めましたが、Rubyの経験もあまりありません。私の現在の問題は、以下の関係を前提として、特定のユーザーのすべてのプロジェクトを見つけようとしていることです。

ユーザーモデル

class User < ActiveRecord::Base
    has_many :projects_users
    has_many :projects, :through => :projects_users
    attr_accessible :email, :firstname, :id, :lastname, :password, :username, :password
    has_secure_password
end

プロジェクトモデル

class Project < ActiveRecord::Base
    has_many :projects_users
    has_many :users, :through => :projects_users
    attr_accessible :date_created, :id, :name
end

Project_Userモデル

class ProjectsUsers < ActiveRecord::Base
    belongs_to :project
    belongs_to :user
end

これまでの私の試みは次のとおりです。

@projectuserid = ProjectsUsers.find(:all, :conditions => "user_id=#{session[:user_id]}")
@projects = Project.all(@projectuserid)

しかし、それ@projectuserid自体が配列のように見えるため、クエリは機能しません。このHABTMリレーションシップモデルの1行のコードで実現できることはわかっていますが、それでもRailsについての知識はほとんどありません。

私の別のアプローチは次のようになりますが、空白の結果が返されます。

@projects = Project.find :all,
         :conditions => "id in (select distinct project_id from projects_users where user_id=#{session[:user_id]})"
4

2 に答える 2

9

このエラーは、Railsの命名規則に従っていないことが原因である可能性があります。

  • ProjectUserモデルには、。ではなく、単数形の名前を付ける必要がありますProjectsUsers
  • モデルに追加のデータを保存する予定がない場合は、通常の関係ProjectUserを使用する方がよいでしょう。has_and_belongs_to_many言い換えると、「結合モデル」はなく、。という名前の結合テーブルだけprojects_usersです。

したがって、どちらかを実行します。

class User < ActiveRecord::Base
    has_and_belongs_to_many :projects
end

class Project < ActiveRecord::Base
    has_and_belongs_to_many :users
end

またはあなたはこれを行います:

class User < ActiveRecord::Base
    has_many :project_users
    has_many :projects, through: :project_users
end

class Project < ActiveRecord::Base
    has_many :project_users
    has_many :users, through: :project_users
end

class ProjectUser < ActiveRecord::Base
    belongs_to :user
    belongs_to :project
end

どちらの場合も、これを行うことができます:user.projectsおよびproject.users

于 2012-10-27T07:33:43.047 に答える
1

呼び出すだけ@user.projectsで、ユーザーに関連付けられているすべてのプロジェクトを取得できます。

于 2012-10-27T07:11:00.857 に答える