【问题标题】:Rails beginner config/routes.rb issueRails 初学者配置/routes.rb 问题
【发布时间】:2012-09-14 06:06:32
【问题描述】:

我在理解配置/路由实际路由到什么时遇到了一些麻烦。例如,假设我开始了一个全新的项目并生成了一个用户控制器并编辑了我的 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 的魔力是什么,什么不是。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    如果在控制器操作中没有调用其他renderredirect,Rails 默认尝试使用与操作相同的名称呈现模板。基本上,每个控制器操作的末尾都有一个隐含的render :action

    但是您可以通过添加显式渲染来轻松覆盖它,例如,

    render :rubyonrailsmeetup
    

    为清楚起见进行编辑:对render 的调用进入控制器代码,而不是配置/路由

    【讨论】:

    • ooooo 所以 match '/signup', to: 'users#new', render :users/rubyonrailsmeetup 会覆盖默认值,在这种情况下是 render :users/new
    • 你可以在动作结束时添加渲染线...如果你想覆盖
    • 啊我开始明白了。多谢你们。所以配置/路由首先进入控制器,如果操作中没有render,那么默认情况下它只会进入文件名为“(控制器)/(操作).html.erb”的视图,对吗?
    • 是的,你明白了。此外,重定向也会阻止它呈现该模板(如您所料)。
    • 另外,如果视图 rubyonrailsmeetup.html.erb 在 /views/users 中,它只是 render :rubyonrailsmeetup - 您不需要指定它是用户模板。但是,您可以通过指定路径(相对于 /views/)从非用户目录呈现视图,例如,render 'events/rubyonrailsmeetup' 将查找 views/events/rubyonrailsmeetup.html .erb
    【解决方案2】:

    我的视图模板是否总是必须与“(控制器名称)/(动作名称)”格式的控制器和动作名称相同

    这些是默认值,您可以通过在 action

    结束时提供render :view_file_rel_path 来呈现该操作的任何视图

    默认情况下是否将“resources :users”添加到 config/routes.rb 与视图模板文件名匹配

    routes.rb 中添加的任何内容仅与控制器直接相关,即它匹配请求并将其映射到控制器/动作。视图的逻辑只出现在动作代码中

    【讨论】:

    • 但很多时候控制器中的操作都是空白的(例如,对于不需要与数据库交互的静态页面)。所以在这些情况下,视图将由您所指的“默认”决定吗?
    • 是的,要呈现的视图始终由默认值决定,即“controller_name/action_name.html”,除非您在操作中明确写了render..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2020-11-23
    • 2015-03-16
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多