1

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

我对 ruby​​ 和 rails 很陌生,所以一切都非常真实。我的第一个问题与 CanCan wiki页面中的一行代码有关

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

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

rails g devise User

我也可以运行:

rails g controller Users

我在这里看到了这个问题,但不太明白答案。通过生成“用户”控制器来处理我想做的事情,我会得到一个错误吗?

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

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

4

1 回答 1

2

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

我的一个问题是:

我也可以运行:

rails g controller Users

是的,这就是我所做的。我使用漂亮的脚手架生成器来生成视图,所以这个命令实际上如下所示

rails g nifty:scaffold user   

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

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

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 localhost:3000/users/2 localhost:3000/users/3 ...等

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

至于我关于角色的问题:

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

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

希望这对其他人有所帮助。

于 2012-02-26T18:55:22.790 回答