跳到有效的EDIT2
有:
我有一个表格,您可以在其中创建一个新项目。一个项目具有几个属性,例如名称,状态等,现在很重要:iit。 iit可以通过单选按钮选择:是或否。
我想要什么:
如果有人在“项目”表单的iit上选择“ 是”,则GroupPermission中应该有一条新记录。因此,在每个iit = 1的项目中,都应该有一个特定的GroupPermisson。
我可以在GroupPermission模型中进行检查吗?就像
class GroupPermission < ActiveRecord::Base
if Project.where(iit: 1)
make me a record for each project
end
我可以像这样在模型中输入数据库条目吗?
这是正确的方法吗?
EDIT1:
在项目控制器中,我添加了:
if params[:iit] = 1
record = GroupPermission.new(cn: 'ccc-ml', project_id: params[:id])
record.save
end
然后在GroupPermissions中添加新记录。但是我需要项目的:id。如何访问将要保存的项目的ID?
EDIT2
在项目控制器中
after_filter :iit_test, :only => [:create]
...
private
def iit_test
if @trial.iit == 1
record = GroupPermission.new(cn: 'ccc-ml', project_id: @project.id, name: 'CATEGORY_3')
record.save
end
结束
EDIT2正常工作。我只需要检查更新等。
谢谢。
答案 0 :(得分:0)
在如下所示的Project控制器中写一个先行动作
def find_project
@project = Project.find_by(id: params[:id])
end
通过在操作之前调用上述方法,您将获得Project的实例。
因此,您可以通过以下方式创建组权限
def create_group_permission
@project.group_permissions.create(cn: 'ccc-ml')
end
上面的操作将创建一个GroupPermission记录,其中包含一个项目ID,该ID是在操作之前找到的。
答案 1 :(得分:0)
您可以将逻辑移至单独的服务,而不必在projects_controller
中使用方法。这将使您的代码易于测试等。
类似..
class ProjectsController < ApplicationController
def create
@project = ProjectService.create(project_params)
# rest of your controller code
end
end
#app/services
class ProjectService
def self.create(project_params)
project = Project.new(project_params)
if project.save && project.iit == 1
GroupPermission.create(cn: 'ccc-ml', project_id: project.id, name: 'CATEGORY_3')
end
project
end
end
答案 2 :(得分:0)
EDIT2
仅适用于命中控制器的api,不适用于通过Rails控制台添加项目,在测试中使用等情况。
在每次创建新的GroupPermission时,此:iit_test
也无法正确地用于update action
。 (该项目可能已经存在GroupPermission)
您可能应该在项目模型中添加一个回调after_save
,并在那里处理新的GroupPermission的添加。