Rails:从多对多关系的“selected”对象构建对象
我正在使用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创建操作中找到选定/正确的帐户?
任何答案,指导或技巧将是伟大的。
谢谢。
假设你有一个返回登录的用户在当前“当前用户”的方法,你可以尝试这样的:
添加到路由
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
谢谢,我有一个相关的问题。我尝试了你的方法,但是我把它移到了另一个控制器中的“home”动作中,例如:'account = current_user.accounts.where(:id => 1) @project = account.projects.build if signed_in?' id => 1用于测试)。但是现在我得到了#
检查API,看看你是否可以在滑轨控制台中重新创建 – 2012-04-08 13:53:21
感谢您的回答和评论。我决定使用一个隐藏字段,我通过account_id传递一个几乎相同的解决方案,如您所指出的:'account = current_user.accounts.find(params [:project] [:account_id]) @project = account.projects .build(PARAMS [:项目])'。但是,根据“Rails方式”不知道我的解决方案是否正确,也不是超安全。可能为此提出另一个问题。但是,谢谢! – Anders 2012-04-09 20:05:09
重新标记以删除红宝石,因为这是轨道具体 – 2012-04-07 20:56:04