sách gpt4 ăn đã đi

ruby-on-rails - 如何使用 Rspec 重构 Rails 模型中的复杂方法?

In lại 作者:数据小太阳 更新时间:2023-10-29 07:30:37 27 4
mua khóa gpt4 giày nike

我有以下复杂的方法。我正在尝试寻找并实现可能的改进。现在我将最后一个 if 语句移动到 Truy cập loại.

def add_access(access)
if access.instance_of?(Access)
up = UserAccess.find(:first, :conditions => ['user_id = ? AND access_id = ?', self.id, access.id])
if !up && company
users = company.users.map{|u| u.id unless u.blank?}.compact
num_p = UserAccess.count(:conditions => ['user_id IN (?) AND access_id = ?', users, access.id])
if num_p < access.limit
UserAccess.create(:user => self, :access => access)
khác
return "You have exceeded the maximum number of alotted permissions"
kết thúc
kết thúc
kết thúc
kết thúc

我还想在重构之前添加规范。我添加了第一个。应该如何看起来像其他人?

  describe "#add_permission" do
before do
@permission = create(:permission)
@user = create(:user)
kết thúc

it "allow create UserPermission" do
expect {
@user.add_permission(@permission)
}.to change {
UserPermission.count
}.by(1)
kết thúc
kết thúc

câu trả lời hay nhất

这是我的做法。

使对 Access 的检查更像初始断言,并在发生这种情况时引发错误。

创建一种新方法来检查现有用户访问权限 - 这似乎可重用且更具可读性。

然后,公司限制对我来说更像是一种验证,将其作为自定义验证移至 UserAccess 类中。

class User

has_many :accesses, :class_name=>'UserAccess'

def add_access(access)
raise "Can only add a Access: #{access.inspect}" unless access.instance_of?(Access)

if has_access?(access)
logger.debug("User #{self.inspect} already has the access #{access}")
trả về sai
kết thúc

accesses.create(:access => access)
kết thúc

def has_access?(access)
accesses.find(:first, :conditions => {:access_id=> access.id})
kết thúc

kết thúc

class UserAccess

validate :below_company_limit

def below_company_limit
return true unless company
company_user_ids = company.users.map{|u| u.id unless u.blank?}.compact
access_count = UserAccess.count(:conditions => ['user_id IN (?) AND access_id = ?', company_user_ids, access.id])
access_count < access.limit
kết thúc

kết thúc

关于ruby-on-rails - 如何使用 Rspec 重构 Rails 模型中的复杂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146445/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress