【问题标题】:do i need one controller action per view template in rails?Rails 中的每个视图模板是否需要一个控制器操作?
【发布时间】:2014-11-26 11:09:14
【问题描述】:

我是 ROR 的新手,我目前正在构建一个简单的平台应用程序,用户可以在其中登录到他们的仪表板并注册服务。现在我有几个页面仅供用户参考,例如欢迎页面或 how_to 页面。我想限制对这些页面的访问,只有在用户登录后才能访问。

我的问题是,我是否需要在我的 UserController 中执行单独的操作来显示指向这些视图模板的链接?例如

class UsersController < ApplicationController


    def welcome
    end

    def howto
    end
end

这是我的路线文件。

resources :users
resources :sessions, only: [:new,:create,:destroy]

root 'main#index'
match '/pro', to: 'main#pro', via:'get'


match '/signup',  to: 'users#new',            via: 'get'
match '/signin',  to: 'sessions#new',         via: 'get'
match '/signout', to: 'sessions#destroy',     via: 'delete'

编辑:

好的,我想我现在开始了解情况了。就我而言,同一个视图模板不会有条件内容,仪表板模板的布局和结构与我的公共视图模板完全不同。我可以限制对我的整个控制器的访问,这需要用户在查看之前登录。我的问题仍然存在。如果我有一堆仅供授权用户使用的视图模板,我是否需要为我的受限控制器中的每个模板执行新操作?

【问题讨论】:

  • 要显示这些页面,是的,您需要为它们设置路线。
  • 如果有人有很多这样的页面需要显示给授权用户,比如一个更大的应用程序,这会不会失控?
  • 您不需要复制每个视图(1 个用于已登录用户,另一个用于未登录用户)在应用程序助手中设置 current_user 和 login_required 方法。这样,您可以(在视图中)有条件地显示信息(如果他们已登录)。在整个页面需要登录的任何情况下,只需将 :login_required 的 before_filter 添加到那个/那些操作。
  • 你应该看看 cancancan gem
  • 创建页面模型和控制器并允许管理员输入内容

标签: ruby-on-rails model-view-controller controller


【解决方案1】:

您可以对所有页面使用一个操作,并编写如下内容:

get "/:page" => "user#page", constraints: { page: /welcome|about/ }

然后在你的控制器中:

def page
  render params[:page]
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2013-08-29
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多