Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails中创建任意链接?_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 如何在Rails中创建任意链接?,ruby-on-rails,Ruby On Rails,link_to和helpers使用我的模型及其ID的名称,而我希望在我的链接中有两个不同的、任意的变量。我没有问题路由他们,我实际上保留默认路由以及,但我突然坚持,我不能轻易地生成任意链接。例如,我想有一个链接,比如“:name_of_board/:post_number”,其中:name_of_board和:post_number是我设置的变量,当我使用link_时,我得到的是“posts/:id”,其中“posts”是控制器的名称。而使用像这样的任意id并不难 link_to 'Reply'

link_to和helpers使用我的模型及其ID的名称,而我希望在我的链接中有两个不同的、任意的变量。我没有问题路由他们,我实际上保留默认路由以及,但我突然坚持,我不能轻易地生成任意链接。例如,我想有一个链接,比如“:name_of_board/:post_number”,其中:name_of_board和:post_number是我设置的变量,当我使用link_时,我得到的是“posts/:id”,其中“posts”是控制器的名称。而使用像这样的任意id并不难

link_to 'Reply', :controller => "posts", :action => "show", :id => number

我不知道怎样才能摆脱“帖子”。那么,有没有一种简单的方法可以通过变量生成链接,或者将字符串转换为链接?当然,我可以在上面的行中添加其他查询,但这会使链接更加难看,例如“posts/:id?name_of_board=:name_of_board”。

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

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

您应该首先编辑路线条目,例如,经典的表演路线如下所示:

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
然后

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

 "/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末尾的其他变量(
“?…&..”

将有助于查看路由
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"