Rails 3.2.3 with Devise 2.1
我只是想创建一个我认为会显示所有用户的简单页面。用户正在由Devise控制。用户有个人资料图片和电子邮件地址所有Devise观点都很好。
我尝试了其他地方看到的一些建议,例如在新的user_controller或application_controller中定义用户,但我的定义没有通过其他页面。我一直收到同样的错误信息。
我的路线工作正常。 我已经让所有的载波工作在上传器和模型中正常工作了。 我似乎无法找到任何设计之外的“用户”。我知道我是愚蠢的,希望明显的东西显而易见,但是。 。
我当前的错误是:
undefined method `image_url' for nil:NilClass
我显示用户的页面:
<% provide(:title, 'Our Users') %>
<div class="center hero-unit">
<div>
<h2>Our Users</h2>
<%= render 'shared/user' %>
</div>
</div>
帮助者:
<div>
<%= image_tag user.image_url(:thumb).to_s %>
<h5><%= user.email %></h5>
</div>
我在users_controller中尝试过各种各样的东西,但似乎没有任何效果。 我尝试过添加资源:用户到我的路线。没有帮助。
任何提示,指示等都会非常感激。我已经花了4个小时,以免不必要地破坏stackoverflow部落,但我很难过。
答案 0 :(得分:4)
解决了!我试图在非Devise控制器中定义我的用户。然后在我看来使用它:
<% @users.each do |user| %>
<%= image_tag user.image_url(:thumb).to_s %>
<%= user.email %><br/>
<% end %>
我抛弃了新的user_controller,只是将我的视图更改为:
<% @users = User.all %>
<% @users.each do |user| %>
<%= image_tag user.image_url(:thumb).to_s %>
<%= user.email %><br/>
<% end %>
的Bam!显示出来。
答案 1 :(得分:0)
你应该像普通模特一样找到你的用户,如下:
user = User.find(1)
user.email
对于当前用户,您可以执行current_user.email
在控制器中你应该这样做:
@users = User.all
在你看来
<% @users.each do |user| %>
<%= user.email %>
<% end %>
答案 2 :(得分:0)
要打印所有设置为rails partial collection rendering的用户,并提供User.all
:
<% provide(:title, 'Our Users') %>
<div class="center hero-unit">
<div>
<h2>Our Users</h2>
<%= render 'shared/user', :collection=>User.all %>
</div>
</div>
答案 3 :(得分:0)
作为此问题的更新。 @Dougui提供的答案目前正在为Devise工作,截止日期为今天。自2012年以来,Devise gem中可能已经更新了某些内容,但现在您可以在控制器中定义@users = User.all
以在视图中访问它。只需确保将其放置在该页面的def
中即可。例如,如果您有各种页面的Pages控制器,并且您想要站点上用户的rolodex,请确保为rolodex页面定义变量,如下所示:(请注意,此示例中该变量仅可用到rolodex页面。)
应用程序/控制器/ pages_controller.rb
class PagesController < ApplicationController
def home
end
def contact
end
def rolodex
@users = User.all
end
end
app / views / pages / rolodex.html.erb
<h1>Current User Rolodex</h1>
<% @users.each do |user| %>
<%= image_tag user.image_url(:thumb).to_s %>
<h5><%= user.email %></h5>
<br>
<% end %>
如果您希望@users
变量可用于多个页面,那么您可以在控制器顶部要求它,私下定义它,然后限制哪些页面可以访问变量。这是一个例子:
app / controllers / pages_controller.rb
class PagesController < ApplicationController
before_action :get_users, only: [:rolodex, :friends]
def home
end
def contact
end
def rolodex
end
def friends
end
private
def get_users
@users = User.all
end
end