Rails:从多对多关系的“选定”对象构建对象

时间:2012-04-07 20:22:49

标签: ruby-on-rails many-to-many

我正在开发一个Rails应用程序(我的Rails技能很生疏)。在其中我目前有四个模型,用户,帐户,协作者(来自用户* - *帐户的连接表)和项目。每个用户可以拥有许多帐户,而这些帐户可以拥有许多项目。我目前在为正确的帐户创建项目时遇到一些麻烦。我的目标是在同一页面上显示用户帐户(也可以称为公司)和帐户项目,并让项目在同一页面上创建操作。像这样:

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创建操作中找到所选/正确的帐户?

任何答案,指导或提示都会很棒。

感谢。

1 个答案:

答案 0 :(得分: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