了解这些事情
model_sym = :users
user_id = 1
我可以这样做:
url = "#{model_sym.to_s}/#{user_id}"
但是我有办法做这样的事吗?:
url = url_for(model_sym, user_id)
我可以先找到"用户传入url_for,但我不愿意。
答案 0 :(得分:1)
我认为您可以使用polymorphic_url
:
polymorphic_url([model_sym, user_id])
<强>资源强>
写完之后,似乎你对Rails的资源本质感到困惑。
Rails构建于Ruby之上,是面向对象的,这意味着您所做的一切都需要绑定到object
(模型):
这一点很重要的原因是因为所有Rails的助手等都是围绕对象构建的。这就是为什么当你创建一组新的路线时,你可以简单地调用resources
(因为资源丰富的是给对象一组你可以调用的属性/方法)
-
<强>实施强>
你遇到的问题是你没有把你的路线基于任何物体 - 你只是 呼叫符号/数字。虽然这会起作用,但它不是创建Rails功能的“正确”方法
您理想的情况是构建对象,并将它们传递给应用程序的路由结构。要构建对象,您需要执行以下操作:
@user = User.find params[:id] #-> builds object
<%= link_to "Users Path", @user %> #-> pulls route from object
答案 1 :(得分:0)
这样的事情:
url_for(:controller => model_sym.to_s, :action => :show, :id => user_id)
答案 2 :(得分:-1)
您可以send("#{ model_sym.to_s.singularize }_path", id)
获取所需的网址
这会在您的示例中调用user_path(1)
。