Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更改角色和mod_对象中关联表的字段时出错_Ruby On Rails_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 更改角色和mod_对象中关联表的字段时出错

Ruby on rails 更改角色和mod_对象中关联表的字段时出错,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我正在尝试实现用于访问我们的软件模型的角色系统。我有两个模型和一个绑定模型 角色(id,名称)、ModObject(id,名称)、ModObjectsRoles(角色id、mod_对象id、canCreate、canRead、canUpdate、canDelete)。最后四个字段是布尔值 榜样: class Role < ActiveRecord::Base acts_as_authorization_role has_many :mod_objects_roles has_

我正在尝试实现用于访问我们的软件模型的角色系统。我有两个模型和一个绑定模型

角色(id,名称)、ModObject(id,名称)、ModObjectsRoles(角色id、mod_对象id、canCreate、canRead、canUpdate、canDelete)。最后四个字段是布尔值

榜样:

class Role < ActiveRecord::Base
  acts_as_authorization_role

  has_many :mod_objects_roles
  has_many :mod_objects, :through => :mod_objects_roles

  def change_role_permissions(mod_object_id)
    @tmp = self.mod_objects_roles.find_by_mod_object_id(mod_object_id) #I get from mod_objects_roles table the row with mod_object_id=34
    @tmp.canUpdate = false #change value of 'canUpdate' field to false
    @tmp.save              # and save it
  end
end
如果有人有这方面的经验,请帮助我。 提前谢谢你

更新,我得到的错误是:

TypeError in RolesController#update

nil is not a symbol

Extracted source (around line #10):

@tmp = self.mod_objects_roles.find_by_mod_object_id(mod_object_id) #I get from mod_objects_roles table the row with mod_object_id=34
@tmp.canUpdate = false #change value of 'canUpdate' field to false
@tmp.save              # and save it
  end
end

我终于解决了。出现错误是因为模型ModObjectRole没有主键。所以我必须使用名为composite_primary_key的gem,并为它设置一个复合主键,比如(mod_object_id,role_id)。就这些


谢谢…

您可以使用工厂或装置,而不是手动创建对象。如果您还向我们显示一条错误消息,那将非常有用。
class ModObjectsRole < ActiveRecord::Base
  belongs_to :mod_object
  belongs_to :role
end
class RolesController < ApplicationController
  before_action :set_role, only: [:show, :edit, :update, :destroy]

  def update
    respond_to do |format|
      if @role.update(role_params)
        @role.change_role_permissions(34) # this is where I am trying to test
        format.html { redirect_to @role, notice: "Hi"}
        format.json { render :show, status: :ok, location: @role }
      else
        format.html { render :edit }
        format.json { render json: @role.errors, status: :unprocessable_entity }
      end
    end
  end
mod_object_id | role_id | canCreate | canRead | canUpdate | canDelete       
    34            1         TRUE      TRUE       TRUE       TRUE
    2             1         FALSE     FALSE      TRUE       TRUE
TypeError in RolesController#update

nil is not a symbol

Extracted source (around line #10):

@tmp = self.mod_objects_roles.find_by_mod_object_id(mod_object_id) #I get from mod_objects_roles table the row with mod_object_id=34
@tmp.canUpdate = false #change value of 'canUpdate' field to false
@tmp.save              # and save it
  end
end