如何在Rails中创建任意链接?

时间:2013-12-08 12:33:56

标签: ruby-on-rails

link_to和帮助者使用我的模型的名称及其ID,而我希望在我的链接中有几个不同的,任意的变量。我没有问题来路由它们,我实际上也保留了默认路由,但我突然坚持认为我不能轻易生成任意链接。例如,我希望有一个像“:name_of_board /:post_number”这样的链接,其中:name_of_board和:post_number是我设置的变量,当我使用link_to时,我得到的是“posts /:id”,其中“posts”就是控制器的名称。虽然使用像

这样的任意id并不难
link_to 'Reply', :controller => "posts", :action => "show", :id => number

我无法理解如何摆脱“帖子”。那么,是否有一种通过变量生成链接或将字符串转换为链接的简单方法?当然,我可以在上面的行中添加其他查询,但它会使链接更加难看,例如“posts /:id?name_of_board =:name_of_board”。

2 个答案:

答案 0 :(得分:0)

您可以在routes.rb中为帖子资源创建其他路由,或者创建独立的命名路由:

resources :posts do
  get ':name_of_board/:id' => 'posts#show', as: :with_name_of_board
end

get ':name_of_board/:id' => 'posts#show', as: :board

现在这个

@name_of_board = "foo"
@post_id = 5

link_to 'Reply', posts_with_name_of_board_path(@name_of_board, @post_id)

link_to 'Reply', board_path(@name_of_board, @post_id)

会分别链接到/posts/foo/5/foo/5

答案 1 :(得分:0)

您应首先编辑路线条目,例如经典的节目路线如下:

get "post/:id" => "post#show", :as => :post
# + patch, put, delete have the same link but with different method

您可以使用以下帮助程序调用它

link_to "Show the post", post_path(:id => @post.id)

您可以在路线中编辑或创建新条目,应用您想要使用的参数,例如:

get "post/:id/:my_platform" => "post#show", :as => :post_custom

然后

link_to "Show the post with custom", post_custom_path(:id => @post.id, :my_platform => "var")

最后,为最后一个条目生成的链接例如是:

 "/post/3/var"

即使在这种情况下,您也可以添加一些未在路线中定义的其他参数,例如:

link_to "Show post with params", post_custom_path(:id => @post.id, :my_platform => "var", :params1 => "var1", :params2 => "var2")
=> "/post/3/var?params1=var1&params2=var2"

RoR匹配您在呈现链接时在路由中定义的变量(请记住这些变量是必需的),但您可以添加其他变量,这些变量位于URL的末尾("?...&.."