2012-02-24 72 views
1

我正在尝试为我的社区网站创建配置文件页面。我已经关注了视频教程并阅读了关于github的Devise gem和CanCan gem的文档。由于这两个宝石和railscasts上的教程,我已安装并且当前有一个正常运行的身份验证系统。设计CanCan角色和配置文件

我对ruby和rails非常陌生,所以一切仍然非常直白。我的第一个问题涉及到从康康舞wiki

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

一行代码,我没有看到一个Users文件夹或该控制器。这是不是我可以生成 - 例如我跑

rails g devise User 

我也跑:

rails g controller Users 

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

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

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

回答

2

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

我的一个问题是:

难道我也跑:

rails g controller Users 

是的,这就是我所做的。我用nifty scaffold发电机来产生意见,使这个命令实际上类似于以下

rails g nifty:scaffold user 

要注意,我并没有用户后通过的任何变量是很重要的。 Devise已经在数据库中创建了Users表。这会产生冲突。 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 

保证色器件将正确验证。

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

本地主机:3000 /用户/ 1 本地主机:3000 /用户/ 2 本地主机:3000 /用户/ 3 ... ECT

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

至于我对角色的问题:

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

您现在可以访问这个由漂亮的脚手架发生器创建的用户控制器,所以你可以将此代码添加到您的形式,如果你也是继瑞安Bates方法来整合CanCan角色,如here所述。

希望这可以帮助别人。