Ruby 在 Rails 模型中的 DB 条目 (For 3)
Ruby on Rails DB entry in a model (RoR 3)
跳到有效的 EDIT2
有:
- 项目 (has_many :group_permissions)
- 组权限(belongs_to:项目)
我有一个表单,您可以在其中创建一个新项目。一个项目有几个属性,如名称、状态等,现在很重要: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。
跳到有效的 EDIT2
有:
- 项目 (has_many :group_permissions)
- 组权限(belongs_to:项目)
我有一个表单,您可以在其中创建一个新项目。一个项目有几个属性,如名称、状态等,现在很重要: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。