2012-04-07 117 views
0

我正在使用Rails应用程序(我的Rails技能很生疏)。其中我目前有四个模型,用户,帐户,协作者(从用户* - *帐户连接表)和项目。每个用户可以拥有许多账户,这些账户可以有很多项目。我目前在为正确的帐户创建项目时遇到了一些麻烦。我的目标是在同一页面上显示用户帐户(也可以称为公司)和帐户项目,并且还可以在同一页面上创建项目。事情是这样的:Rails:从多对多关系的“selected”对象构建对象

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

任何答案,指导或技巧将是伟大的。

谢谢。

+0

重新标记以删除红宝石,因为这是轨道具体 – 2012-04-07 20:56:04

回答

1

假设你有一个返回登录的用户在当前“当前用户”的方法,你可以尝试这样的:

添加到路由

resources :accounts do 
    resources :projects 
end 

,检查路由

..from命令行做'耙路'

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 
+0

谢谢,我有一个相关的问题。我尝试了你的方法,但是我把它移到了另一个控制器中的“home”动作中,例如:'account = current_user.accounts.where(:id => 1) @project = account.projects.build if signed_in?' id => 1用于测试)。但是现在我得到了#'的未定义方法'项目',尽管我已经建立了上面的关系。你知道这是为什么吗?谢谢。 – Anders 2012-04-08 12:43:47

+0

检查API,看看你是否可以在滑轨控制台中重新创建 – 2012-04-08 13:53:21

+0

感谢您的回答和评论。我决定使用一个隐藏字段,我通过account_id传递一个几乎相同的解决方案,如您所指出的:'account = current_user.accounts.find(params [:project] [:account_id]) @project = account.projects .build(PARAMS [:项目])'。但是,根据“Rails方式”不知道我的解决方案是否正确,也不是超安全。可能为此提出另一个问题。但是,谢谢! – Anders 2012-04-09 20:05:09

相关问题