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

时间:2018-08-23 09:53:06

标签: database ruby-on-rails-3 model

跳到有效的EDIT2

有:

  • 项目(has_many:group_permissions)
  • GroupPermission(属于:project)

我有一个表格,您可以在其中创建一个新项目。一个项目具有几个属性,例如名称,状态等,现在很重要: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正常工作。我只需要检查更新等。

谢谢。

3 个答案:

答案 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的添加。