如何正确使用此参数?
how do I use this parameter correctly?
我的 rails 应用程序中有一个方法。
def current_user_can_edit?(model)
user_signed_in? && (
model.user == current_user ||
(model.try(:post).present? && model.post.user == current_user)
)
end
需要该方法来检查编辑模型的可能性。我的应用程序中有 posts 和事件。我想动态地用 post 或事件代替一个选择,而不是静态的 post.
怎样才能正确的写一个方法,才不会提出很多条件呢?例如,在这里:
def current_user_can_edit?(model, action)
if action.class.to_s == 'Post':
user_signed_in? && (
model.user == current_user ||
(model.try(:post).present? && model.post.user == current_user)
)
elsif action.class.to_s == 'Event':
user_signed_in? && (
model.user == current_user ||
(model.try(:event).present? && model.event.user == current_user)
)
end
end
在您的方法逻辑中,表达式:
model.try(:post).present? && model.post.user == current_user
可以通过链接两个 try
调用来组合:
model.try(:post).try(:user) == current_user
现在您可以将 :post
替换为计算值:
model.try(action.class.to_s.downcase).try(:user) == current_user
完整代码:
def current_user_can_edit?(model, action)
user_signed_in? && (
model.user == current_user ||
model.try(action.class.to_s.downcase).try(:user) == current_user
)
end
你也可以使用一些保护子句:
def current_user_can_edit?(model, action)
return unless user_signed_in?
return true if model.user == current_user
model.try(action.class.to_s.downcase).try(:user) == current_user
end
我假设 action.class.to_s
returns "Post"
。如果将 :post
作为方法的第二个参数传递,代码当然会更简单。
我的 rails 应用程序中有一个方法。
def current_user_can_edit?(model)
user_signed_in? && (
model.user == current_user ||
(model.try(:post).present? && model.post.user == current_user)
)
end
需要该方法来检查编辑模型的可能性。我的应用程序中有 posts 和事件。我想动态地用 post 或事件代替一个选择,而不是静态的 post.
怎样才能正确的写一个方法,才不会提出很多条件呢?例如,在这里:
def current_user_can_edit?(model, action)
if action.class.to_s == 'Post':
user_signed_in? && (
model.user == current_user ||
(model.try(:post).present? && model.post.user == current_user)
)
elsif action.class.to_s == 'Event':
user_signed_in? && (
model.user == current_user ||
(model.try(:event).present? && model.event.user == current_user)
)
end
end
在您的方法逻辑中,表达式:
model.try(:post).present? && model.post.user == current_user
可以通过链接两个 try
调用来组合:
model.try(:post).try(:user) == current_user
现在您可以将 :post
替换为计算值:
model.try(action.class.to_s.downcase).try(:user) == current_user
完整代码:
def current_user_can_edit?(model, action)
user_signed_in? && (
model.user == current_user ||
model.try(action.class.to_s.downcase).try(:user) == current_user
)
end
你也可以使用一些保护子句:
def current_user_can_edit?(model, action)
return unless user_signed_in?
return true if model.user == current_user
model.try(action.class.to_s.downcase).try(:user) == current_user
end
我假设 action.class.to_s
returns "Post"
。如果将 :post
作为方法的第二个参数传递,代码当然会更简单。