我是新手,我在理解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'?
如果有人能帮助我,我真的很感激。
答案 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%>