【问题标题】:Devise CanCan Roles and Profile设计 CanCan 角色和简介
【发布时间】:2023-03-21 16:11:01
【问题描述】:

我正在尝试为我的社区网站创建个人资料页面。我已经关注了视频教程,并在 github 上阅读了 Devise gem 和 CanCan gem 的文档。多亏了这两个 gem 和 railscasts 上的教程,我已经安装并且目前拥有一个正常运行的身份验证系统。

我对 ruby​​ 和 rails 还很陌生,所以一切都还是很直接的。我的第一个问题与 CanCan wiki page 中的一行代码有关

<!-- in users/_form.html.erb -->
<%= f.collection_select :role, User::ROLES, :to_s, :humanize %>

我没有看到用户文件夹或此控制器。这是我可以生成的东西吗?例如我跑了

rails g devise User

我也可以跑步吗:

rails g controller Users

我看过这个问题here,但不太明白答案。生成“用户”控制器来处理我想做的事情会出错吗?

我生成了设计视图,但没有看到任何控制器——我知道这些控制器可能会被覆盖——尽管我不太明白它是如何工作的。如果我覆盖所有默认设计控制器功能以及覆盖控制器是否仍然有效?

如果我可以生成“用户”控制器,我假设我可以将视图模板放入该位置以获取所有配置文件视图信息。对于这篇文章的问题数量和篇幅,我深表歉意,但我认为在一些帮助下,我可以重新开始运行。感谢您提供的任何信息。

【问题讨论】:

    标签: ruby-on-rails devise cancan user-profile


    【解决方案1】:

    好吧,我解决了这个问题!我会为任何有类似问题的人发布我的解决方案,他们可能会从中受益。

    我的一个问题是:

    我也可以跑步吗:

    rails g controller Users
    

    是的,这就是我所做的。我使用nifty scaffold 生成器来生成视图,所以这个命令实际上如下所示

    rails g nifty:scaffold user   
    

    重要的是要注意我没有在用户之后传递任何变量。设计已经在数据库中创建了用户表。这会产生冲突。 Rails 认为您想覆盖您的原始数据库——您不想这样做。

    这样做会为用户 CRUD 构建正确的结构。接下来打开您的 config/routes.rb 文件。 使用漂亮的生成器将 resources :users 添加到该文件的顶部 - 将其移动到设计资源下方,并按照this devise wiki page 中的描述为路径添加前缀以类似于下面的代码。

    devise_for :users, :path_prefix => 'd'
    resources :users
    

    通过向所有设计控制器添加“/d/”前缀来消除与用户控制器和设计控制器 url 路径的任何冲突非常重要。

    以及将以下代码添加到您的 users_controller 更新方法中:

    if params[:user][:password].blank?
      params[:user].delete(:password)
      params[:user].delete(:password_confirmation)
    end
    

    确保设计正确验证。

    现在有趣的是 - 如果您还没有注册用户,请注册。您现在拥有该用户的个人资料页面,位于:

    localhost:3000/users/1 本地主机:3000/用户/2 本地主机:3000/用户/3 ...等

    您可以在视图文件夹中编辑用户 show.html.erb 页面以更改将在每个用户个人资料页面上显示的信息。

    关于角色的问题:

    <!-- in users/_form.html.erb -->
    <%= f.collection_select :role, User::ROLES, :to_s, :humanize %>
    

    您现在可以在 nifty-scaffold 生成器创建的用户控制器中访问此代码,因此如果您还遵循 Ryan Bates 方法来集成 CanCan 角色(如 here 所述),则可以将此代码添加到表单中。

    希望这有助于其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多