因此,我刚刚与一位同事进行了激烈的宗教争论。
我们有对象模型和 routes.rb:
resources :orgs do
resources :lists do
resources :posts do
resources :replies
end
end
end
所有这些关系都是一对多的,即一个列表将始终恰好属于 1 个组织,一个帖子将始终恰好属于 1 个列表等。我们非常清楚对多嵌套路由的普遍厌恶,但有意识地决定朝这个方向走。
不幸的是,这意味着当您想要链接到编辑回复时,您必须编写:
edit_org_list_post_reply_path( reply.post.list.org, reply.post.list, reply.list, reply )
感觉很傻。
我希望能够做类似的事情:
fast_path( action: :edit, model: reply, type: :path )
并利用回复仅属于一个帖子、属于一个列表等这一事实来计算其余部分。就像是:
def fast_path options
action = options[:action]
model = options[:model]
path_or_url = options[:type]
model_fields = {
reply: [:org, :list, :post]
post: [:org, :list],
list: [:org]
}[model.class.name]
arguments = model_fields.map { |field| model.send(field) } + [model]
named_route_name = model_fields.join("_") + "_" + path_or_url
named_route_name = action + "_" + named_route_name if action
send(named_route_name, arguments)
end
虽然我还没有验证这是否有效或者是特别好的代码。
但是,我的同事以前做过类似的事情,他重写了许多命名路线,以使它们更易于调用。他声称这只会导致痛苦、绝望和折磨,并且这次他正在竭尽全力将这些尝试排除在我们的代码之外。
我很高兴错了,所以请告诉我们您的想法!