url_for只知道模型符号和id

时间:2014-08-20 00:56:54

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

了解这些事情

model_sym = :users
user_id = 1

我可以这样做:

url = "#{model_sym.to_s}/#{user_id}"

但是我有办法做这样的事吗?:

url = url_for(model_sym, user_id)

我可以先找到"用户传入url_for,但我不愿意。

3 个答案:

答案 0 :(得分:1)

我认为您可以使用polymorphic_url

polymorphic_url([model_sym, user_id])

<强>资源

写完之后,似乎你对Rails的资源本质感到困惑。 Rails构建于Ruby之上,是面向对象的,这意味着您所做的一切都需要绑定到object(模型):

enter image description here

这一点很重要的原因是因为所有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)