我正在尝试为社区网站创建个人资料页面。我已经关注了视频教程并在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;控制器,我假设我可以将视图模板放入该位置以获取所有配置文件视图信息。我为这篇文章的问题数量和篇幅道歉,但我想在一点帮助下我可以再次开始运行。感谢您提供的任何信息。
答案 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,则可以将此代码添加到表单中。
希望这有助于其他人。