Ruby 在 Rails 模型中的 DB 条目 (For 3)

Ruby on Rails DB entry in a model (RoR 3)

跳到有效的 EDIT2

有:

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

我想要的:

如果有人在 Project 表单中选择 yes on iit,GroupPermission 中应该会有一条新记录。所以在 iit= 1 的每个项目中都应该有一个特定的 GroupPermisson。

我可以在 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?

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 工作正常。我只需要用更新等检查它

提前致谢。

像下面这样在项目控制器中写一个 before action

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

EDIT2 仅适用于访问控制器的 API,当您通过 rails 控制台添加项目、用于测试等时无效。

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

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