1

Rails 3.2.3 和 Devise 2.1

我只是想创建一个我认为会显示所有用户的简单页面。用户由 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 中尝试了各种方法,但似乎没有任何效果。我尝试将资源 :users 添加到我的路线中。没有帮助。

任何提示,指针等将不胜感激。我已经为此花费了 4 个小时,以免不必要地干扰 stackoverflow 部落,但我被难住了。

4

4 回答 4

5

解决了!我试图在非设计控制器中定义我的用户。然后在我看来使用它:

<% @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 %>

砰!直接出现了。

于 2012-07-21T17:13:50.160 回答
0

Ỳou 应该像普通模型一样找到您的用户,如下所示:

user = User.find(1)
user.email

对于当前用户,您可以执行current_user.email

在控制器中,您应该这样做:

@users = User.all

在你看来

<% @users.each do |user| %>
  <%= user.email %>
<% end %>
于 2012-07-20T22:14:14.490 回答
0

要打印所有用户设置rails 部分集合渲染User.all提供:

<% provide(:title, 'Our Users') %>
    <div class="center hero-unit">
      <div>
        <h2>Our Users</h2>
        <%= render 'shared/user', :collection=>User.all %>
    </div>
</div>
于 2012-07-20T22:14:21.753 回答
0

作为这个问题的更新。截至今天,@Dougui 提供的答案目前正在为 Devise 工作。自 2012 年以来,设计 gem 中可能已经更新了某些内容,但现在您可以@users = User.all在控制器中定义以在视图中访问它。只需确保将其放置在def该页面的 a 中即可。例如,如果您有一个用于各种页面的 Pages 控制器,并且您想要站点上用户的 rolodex,请确保在 rolodex 页面下定义了变量,如下所示:(请注意,在此示例中,该变量仅可用到通讯录页面。)

应用程序/控制器/pages_controller.rb

class PagesController < ApplicationController
  def home
  end

  def contact
  end

  def rolodex
    @users = User.all
  end
end

应用程序/视图/页面/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变量可用于多个页面,那么您可以在控制器顶部要求它,私下定义它,然后限制哪些页面可以访问该变量。这是一个例子:

应用程序/控制器/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
于 2017-12-03T03:45:55.487 回答