Ruby on rails 更改角色和mod_对象中关联表的字段时出错
我正在尝试实现用于访问我们的软件模型的角色系统。我有两个模型和一个绑定模型 角色(id,名称)、ModObject(id,名称)、ModObjectsRoles(角色id、mod_对象id、canCreate、canRead、canUpdate、canDelete)。最后四个字段是布尔值 榜样: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_
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