2011-07-17 46 views
0

我已经设置了以下路线的Rails 3如何在Rails中更简洁地生成此自定义URL?

get '/:user_id/wants/:id' => 'wanted_items#public_view', :as => 'public_wanted_item' 

,其给出了耙路线如下:

public_wanted_item GET /:user_id/wants/:id(.:format) {:controller=>"wanted_items", :action=>"public_view"} 

和它产生下面的网址,这正是我想要的东西:

/username/wants/itemname 

问题是,为了在我的视图中生成这个,我必须使用一个相当详细的构造,其中我明确指定“:user_id”和“:id” :

ruby-1.9.2-p0 :012 > app.public_wanted_item_path(:user_id => item.user, :id => item) 

是否有任何方法可以使此调用更简洁,因为我将在应用程序中使用它?

感谢

编辑:我发现一个可行的解决方案..下面粘贴

看来,如果我使用下面的结构,这是我所希望的工作一样好.. ..虽然我不知道到底为什么它的工作原理..

ruby-1.9.2-p0 :002 > app.public_wanted_item_path item.user, item 

因为下一个不工作,而是抛出一个错误:

ruby-1.9.2-p0 :004 > app.public_wanted_item_path([item.user, item]) 
+0

在我的哈姆意见 – noli

回答

4

这听起来像是一个应用程序帮手的工作。你可以添加类似:

def item_path_for(item) 
    app.public_wanted_item_path(:user_id => item.user, :id => item) 
end 

app/helpers/application_helper.rb,然后你可以使用

<%= item_path_for(pancakes) %> 
在你的意见

(或HAML等价物)或

include ApplicationHelper 
#... 
path = item_path_for(pancakes) 

在你的代码的其他地方。

+0

优秀,谢谢! – noli

0
app.public_wanted_item_path(:user_id => item.user.id, :id => item.id) 
+0

谢谢..但这实际上比我已经有更冗长......? – noli