我在理解实际路由到的配置/路由时遇到了一些麻烦。例如,假设我开始了一个全新的项目,并生成了一个用户控制器并编辑了我的config / routes.rb,如下所示:
config/routes.rb
SampleApp::Application.routes.draw do
match '/signup', to: 'users#new'
end
我启动服务器,正如预期的那样,它说我的用户控制器中没有“新”操作。我创建了一个:
users_controller.rb
class UsersController < ApplicationController
def new
end
我刷新页面并按预期告诉我需要用户/新模板。所以我的问题是:我的视图模板是否必须与“(控制器名称)/(操作名称)”格式的控制器和操作名称相同(在本例中为users / new.html.erb)?如果控制器操作链接到网站的某个功能,是不是可以随机命名我的模板(例如users / rubyonrailsmeetup.html.erb而不是users / new.html.erb)?
此外,默认情况下,将“resources:users”添加到config / routes.rb是否与上面提到的行为匹配视图模板文件名,以便视图必须以其“控制器/操作”名称命名?
很抱歉打扰,我只想弄清楚Rails的魔法是什么,什么不是。
答案 0 :(得分:2)
如果在控制器操作中没有调用其他render
或redirect
,则Rails会尝试使用与操作相同的名称呈现模板。基本上,每个控制器操作结束时都有一个隐式render :action
。
但是你可以通过添加一个显式渲染来轻松地覆盖它,例如,
render :rubyonrailsmeetup
为清晰起见编辑:对render
的此调用在控制器代码中,而不是在config / routes中
答案 1 :(得分:0)
我的视图模板是否必须与“(控制器名称)/(操作名称)”格式中的控制器和操作名称相同
这些默认值,您可以通过在操作
结束时提供render :view_file_rel_path
来呈现操作中的任何视图
默认情况下,将“resources:users”添加到config / routes.rb匹配视图模板文件名
routes.rb 中添加的任何内容仅与控制器直接相关,即它与请求匹配并将其映射到控制器/操作。视图逻辑仅出现在动作代码
中