链接到特定页面的路径 - Ruby on Rails

时间:2015-02-11 16:40:53

标签: ruby-on-rails ruby

我是新手,我在理解Ruby on Rails上的链接路径时遇到了一些麻烦。假设我在app / views / jobs / info.html.erb中说了一个页面,我想从我的index.html.erb链接到该页面,该链接在同一个文件夹中,链接路径是什么?

我在index.html.erb中有另一个链接路径到new.html.erb,如下所示:

<%= link_to "Add a Position", new_job_path %>

但是如果我想做一个指向info.html.erb的链接路径我不明白我放的是什么而不是'new_job_path'?

如果有人能帮助我,我真的很感激。

2 个答案:

答案 0 :(得分:3)

您实际上无法“执行info.html.erb的链接路径”。

链接指的是称为“资源”的抽象事物。在Rails中,资源最终是给定控制器上的特定操作。 config/routes.rb中指定的路由将URL路径转换为控制器上的操作。

如果你运行rake routes,你会看到类似这样的输出:

  Prefix Verb   URI Pattern              Controller#Action
    jobs GET    /jobs(.:format)          jobs#index
         POST   /jobs(.:format)          jobs#create
 new_job GET    /jobs/new(.:format)      jobs#new
edit_job GET    /jobs/:id/edit(.:format) jobs#edit
     job GET    /jobs/:id(.:format)      jobs#show
         PATCH  /jobs/:id(.:format)      jobs#update
         PUT    /jobs/:id(.:format)      jobs#update
         DELETE /jobs/:id(.:format)      jobs#destroy

列出为您的应用程序定义的所有路由。最右边的列是运行的操作。 最左侧列是您在视图中link_to次调用中通常使用的内容。

因此,要回答您的问题,您的info.html.erb文件是“帖子”控制器可用的视图。

如果视图不需要来自数据库或其他“工作”的任何信息,那么默认情况下,在控制器上调用动作“info”将只渲染该视图 - 您不需要修改控制器。 (它将对任何操作执行此操作,而不仅仅是“info”。如果未定义视图,则会生成404错误。)

因此,您需要添加映射到您的操作的路线。如果您查看config/routes.rb,则会看到一行resources :jobs。如果您将其更改为:

resources :jobs do
  collection do
    get :info
  end
end

您可以重新运行rake routes命令,然后您会看到在输出中添加了新行:

   Prefix Verb   URI Pattern              Controller#Action
info_jobs GET    /jobs/info(.:format)     posts#info

这是指向正确操作的路线,您可以通过编写<%= link_to 'Info', info_jobs_path %>在视图中链接到该路线。我通过获取“前缀”列并添加_path来获取该值,这告诉它生成该资源的相对URI。如果我需要绝对URI(通常在邮件程序中需要),那么我已经使用了info_jobs_url

您可以通过其他方式指定路线,具体取决于您可能需要的其他信息 - 查看Rails生成的config/routes.rb中的注释以获取详细信息。

答案 1 :(得分:2)

一种方法是在控制器中添加操作并在config/routes.rb

中添加自定义路线

在JobsController中

def info
  #initialize instance variables that you would use in jobs/info.html.erb
end

配置/ routes.rb中

get 'jobs/info', :to => "jobs/info", :as => job_info

现在在index.html.erb

<%= link_to "Job Info", job_info_path%>