模型中的 Ruby on Rails DB 条目 (RoR 3)



跳到EDIT2

有:

  • 项目 (has_many :group_permissions(
  • 组权限 (belongs_to :p roject(

我有一个表单,您可以在其中创建一个新项目。一个项目有几个属性,如名称、状态等,现在很重要:iit。IIT 可通过单选按钮进行选择:是或否。

我想要什么:

如果有人在"项目"窗体中选择">",则 GroupPermission 中应该有一条新记录。因此,在 iit= 1 的每个项目中,都应该有一定的 GroupMisson。

我可以在 GroupPermission 模型中进行/检查吗?就像如果

class GroupPermission < ActiveRecord::Base
if Project.where(iit: 1)
make me a record for each project
end

我甚至可以像这样在模型中制作数据库条目吗?

这是正确的方法吗?

编辑1:

在项目控制器中,我添加了:

if params[:iit] = 1
record = GroupPermission.new(cn: 'ccc-ml', project_id: params[:id])
record.save
end

然后,它会在 GroupPermissions 中添加一条新记录。但是我需要项目的 :id。如何访问即将保存的项目的 ID?

编辑2

在项目控制器中

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

结束

编辑2工作正常。我只需要通过更新等检查它。

提前谢谢你。

EDIT2仅适用于访问控制器的 API,而不适用于通过 Rails 控制台添加项目、在测试中使用等。

此外,此:iit_test将无法正确用于update action因为您每次都会创建新的组权限。(此项目的组权限可能已存在(

您可能应该在项目模型中添加一个回调after_save,并在那里处理添加新的 GroupPermission 。

在项目控制器中编写一个 before 操作,如下所示

def find_project
@project = Project.find_by(id: params[:id])
end

通过在操作之前调用上述方法,您将获得项目的实例。

因此,您可以通过以下方式创建组权限

def create_group_permission
@project.group_permissions.create(cn: 'ccc-ml')
end

上面将创建一个 GroupPermission 记录,其中包含在操作之前找到的项目 ID。

您可以将逻辑移动到单独的服务,而不是在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

最新更新