好的。我有一些限制。主要是因为这对于更大的应用来说只是一件小事。
:vendor_username => Proc.new { |user|
Spree::Vendor.find_by_user_id(user.id).username if Spree::Vendor.find_by_user_id(user)
}
这是我正在尝试重构的代码。它被证明是ars中真正的痛苦。
问题是这段代码是在哈希内部。
hash = {
# proc here
}
我虽然这个:
hash = {}
if Spree::Vendor.find_by_user_id(user)
hash[:vendor_username] = Proc.new { |user|
Spree::Vendor.find_by_user_id(user.id).username
}
end
我需要做的就是在if语句中添加值,但它会中断。即使我喜欢也不可能写出来。
我需要重构它,因为(a)它看起来并不好看(b)哈希内部会有更多的值。
答案 0 :(得分:1)
def vendor_username(user)
if vendor = Spree::Vendor.find_by_user_id(user.id)
vendor.username
end
end
hash[:vendor_username] = vendor_username(user)
答案 1 :(得分:0)
这就是我解决它的方法:
:vendor_username => Proc.new { |user|
Spree::Vendor.find_by_user_id(user.id).username if Spree::Vendor.find_by_user_id(user)
}
第一个问题是if语句。我发现了这个:
:vendor_username => Proc.new { |user|
Spree::Vendor.find_by_user_id(user.id).try(:username)
}
但我仍然依赖于DB。正如@naomik所指出的那样:find_by_*
已弃用,但由于我使用的是Rails 3.2.x,因此保留了v = Proc.new { |current_user| Spree::Vendor.find_by_user_id(current_user) }
# and inside of the hash would be
:vendor_username => Proc.new { |user| v.call(user.id).try(:username) }
。为了解决这个问题,我把它放在一个过程中,瞧:
{{1}}
我花了好几个小时试图解决这个问题。无法相信它终于结束了。
顺便说一句:我有很多限制。正如@JCorcuera所展示的那样,我确实尝试(并且有意)抽取数据。代码一直在破坏,并且不了解当前用户是谁。