我是rails的新手,我之前已尝试过stackoverflow上可用的所有解决方案。我正在尝试使用localhost:3000 / users / 1通过id访问用户。我的user_controller代码是:
class UsersController < ApplicationController
def new
@user=User.new
end
def index
@users = User.all
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation,:email)
end
def show
@user = @users.find(params[:id])
@users=User.all
end
end
And my show.html.erb contains :
<% provide(:title, @users.name ) %>
<div class="row">
<aside class="span4">
<section>
<h1>
<%= gravatar_for @user %>
<%= @users.name %>
</h1>
</section>
</aside>
</div>
答案 0 :(得分:2)
show
中取出private
个动作。它不是私人方法。这就是变量@users
为零的原因。但是,您甚至不需要找到@users
,下面的答案显示了这一点。name
上调用方法@users
(属性)。您需要在对象@user
上调用它。 旁注:在Rails中还有一个预定义的方法name
,用于ActiveRecord :: Relation(User.all
)。但是,在您发布的示例中,您的变量@users
为零,所以它没有达到这个目的。 但是,如果您的show
操作不是私有方法,您可能会遇到这种情况:
$ User.all.name # or @users.name
# => 'User'
$ Post.all.name
# => 'Post'
$ User.first.name # or @user.name
# => 'John'
<强>解决方案强>
# show.html.erb
<%= @user.name %>
# users_controller
class UsersController < ApplicationController
def index
@users = User.all
end
def new
@user = User.new
end
def show
@user = User.find(params[:id])
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation, :email)
end
end