2

我最近开始学习 ruby​​ on rails 并且我能够成功地创建一个应用程序并使用设计添加用户,还可以使用回形针向用户添加一个头像。

现在我遇到了如何在整个应用程序中显示头像的问题。头像仅显示在http:localhost:3000/users/...(在设计文件夹中)例如,但如果我尝试http://localhost:3000/profile/使用标签创建新页面、模型、控制器例如

<%= image_tag @user.avatar.url(:thumb) %>

页面将无法加载并返回此错误

undefined method 'avatar?' for nil:NilClass

这可能很简单,但我不知道如何解决它。

我的模型user.rb如下所示:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates_uniqueness_of :username

  has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }

  attr_accessible :name, :username, :email, :password, :password_confirmation, :remember_me, :avatar
  attr_accessor :current_password
end

我的控制器看起来像这样:

class UserController < ApplicationController
  def profile
  end
end

谢谢!

4

2 回答 2

2

在 routes.rb 上,你应该有这样的东西:

match "profile" => "user#profile"

在你的UserController,你应该有这样的东西:

class UserController < ApplicationController
  def profile
    @user = current_user
  end
end

然后你就可以使用 @user.avatar.url. 另外,请注意,如果您没有登录用户, current_user 将为nil,然后您将遇到您描述的错误,因此请在您的控制器上添加如下内容:

class UserController < ApplicationController
  before_filter :authenticate_user!

  def profile
    @user = current_user
  end
end

然后,当未经身份验证的帐户尝试访问/profile时,它将被重定向到登录表单。

于 2012-11-22T17:18:03.113 回答
0

我还是 Rails 的新手,如果我错了,请纠正我,但我认为这可能对你有用。

class UserController < ApplicationController
  def profile
    @user = User.find(current_user.username)
  end
end
于 2012-11-22T03:54:23.040 回答