设计CanCan角色和档案

时间:2012-02-24 20:23:38

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

我正在尝试为社区网站创建个人资料页面。我已经关注了视频教程并在github上阅读了Devise gem和CanCan 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

我已经看到了这个问题here,但不太明白答案。通过生成&#34;用户&#34;我会收到错误吗?控制器处理我想做的事情?

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

如果我可以生成&#34;用户&#34;控制器,我假设我可以将视图模板放入该位置以获取所有配置文件视图信息。我为这篇文章的问题数量和篇幅道歉,但我想在一点帮助下我可以再次开始运行。感谢您提供的任何信息。

1 个答案:

答案 0 :(得分: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 %>

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

希望这有助于其他人。