gpt4 book ai didi

ruby-on-rails - 具有不同嵌套量的动态 url_for

转载 作者:行者123 更新时间:2023-12-04 07:40:38 36 4
gpt4 key购买 nike

我正在构建一个辅助方法,它允许我传递一个数组,其中包含我希望可用于管理对象(如编辑、删除等)的选项。该方法的简化版本如下所示:

  def management_links(instance, actions, *parent)
actions.each do |action|
if (can? action, instance)
has_options = true
case action
when :destroy
options = {content: glyphicon('trash') + " Delete #{instance.class.to_s}", class: "delete #{instance.class.to_s.downcase}", method: :delete}
url = url_for [parent, instance]
end
end
end
end

如您所见,这非常适用于嵌套一次(传递 1 个父模型)以获取结构的对象:

parent_model/parent_id/model/id/action

但现在我有一个嵌套两次的模型,所以这不会再削减它了。我尝试传递一个数组 [@grandparent, @parent],但这不起作用,因为 url_for 已经有一个数组。

有什么方法可以让我传递“无限制”的父对象来使用 url_for?

最佳答案

*parent 将始终是数组的一部分(如果存在),所以为什么不这样声明它然后将实例插入其中:

def management_links(instance, actions, *parent)
parents = Array(parent) if parent
new_url = parents ? parents << instance : instance

actions.each do |action|
if (can? action, instance)
has_options = true
case action
when :destroy
options = {content: glyphicon('trash') + " Delete #{instance.class.to_s}", class: "delete #{instance.class.to_s.downcase}", method: :delete}
url = url_for new_url
end
end
end
end

我使用 Array() 来确保 parent 是正确的数据类型(您可以传递 var 的单个实例)。


题外话,但在追求convention , 你应该阅读 nesting by more than one layer :

Resources should never be nested more than 1 level deep.

关于ruby-on-rails - 具有不同嵌套量的动态 url_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063302/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com