0

私はRailsアプリに取り組んでいます(私のRailsスキルはさびています)。現在、ユーザー、アカウント、コラボレーター(ユーザー*-*アカウントのテーブルに参加)、プロジェクトの4つのモデルがあります。各ユーザーは多くのアカウントを持つことができ、そのアカウントは多くのプロジェクトを持つことができます。現在、適切なアカウントのプロジェクトを作成するのに問題があります。私の目標は、ユーザーアカウント(会社とも呼ばれる)とアカウントプロジェクトを同じページに表示し、プロジェクトに同じページでアクションを作成させることです。このようなもの:

Logo 

(current_user) Account 1 (ie. Company account)
  Account Project 1
  Account Project 2
  text_field for creating new projects for Account 1 + submit button

(current_user) Account 2 (ie. My fun hobby projects)
  Account Project 1
  Account Project 2
  text_field for creating new projects for Account 2 + submit button

ユーザーとアカウントの作成に問題はありませんが、アカウントプロジェクトを作成するために上記の結果を達成する方法がわかりません。

アカウントとプロジェクトのモデルと関係は次のようになります。

class Account < ActiveRecord::Base
  [...]
  has_many :projects, dependent: :destroy
  [...]

class Project < ActiveRecord::Base
  [...]
  belongs_to :account
end   

私はこのような新しいプロジェクトを作成するためにつまずきを試みました:

class ProjectsController < ApplicationController
  [...]  
  def create
    # How do I find the selected/correct account?
    @project = "selected_account".projects.build(params[:projects])
    if @project.save
      flash[:success] = "Project created!"
      redirect_to root_path
    else
      render 'pages/home'
    end
  end 

私の質問は、ProjectControllers createアクションで選択された/正しいアカウントを見つける方法におそらく絞り込むことができますか?

どんな答え、ガイダンスまたはヒントも素晴らしいでしょう。

ありがとう。

4

1 に答える 1

1

現在ログインしているユーザーを返す「現在のユーザー」メソッドがあると仮定すると、次のようなことを試すことができます。

ルートに追加

resources :accounts do
  resources :projects
end

ルートを確認する

..コマンドラインから「rake routes」を実行

account_projects GET    /accounts/:account_id/projects(.:format)     projects#index
                 POST   /accounts/:account_id/projects(.:format)     projects#create

POST /accounts/1/projects

class ProjectsController < ApplicationController
  [...]  
  def create
    account = current_user.accounts.find params[:account_id]
    @project = account.projects.build(params[:projects])
    if @project.save
      flash[:success] = "Project created!"
      redirect_to root_path
    else
      render 'pages/home'
    end
  end 
end
于 2012-04-07T20:54:27.117 に答える