有人可以帮我解决这个错误吗?我通过没有型号的控制台添加配置文件控数据库工作正常。我确信我在seed.rb中有姓氏和名字,我只做db:setup / migration。
这是show.html
.page-header
.h1
=link_to @user.firstname + " " + @user.lastname, edit_user_registration_path
数据库:
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "firstname"
t.string "lastname"
t.string "username"
t.boolean "admin", default: false
user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :reviews
has_many :products
validates_presence_of :firstname, :lastname
end
配置文件控制器:
class ProfileController < ApplicationController
def show
@user = User.find_by_username(params[:id])
if @user
@reviews=@user.reviews.order(:created_at).reverse_order.limit(5)
render action: :show
end
end
end
答案 0 :(得分:1)
这部分
@user = User.find_by_username(params[:id])
返回nil
,因为您将id
从params作为username
传递到find_by_username
查找器。无法找到username
(字符串),即id
(整数)。
应该是
@user = User.find(params[:id])
Take a look at docs关于发现者的工作方式
答案 1 :(得分:0)
如果您使用的是find_by_username,那么您应该传递params [:username]而不是params [:id]。
答案 2 :(得分:0)
这一部分:
if @user
@reviews=@user.reviews.order(:created_at).reverse_order.limit(5)
render action: :show
end
即使if语句为false
,仍会调用render action: :show
- 它是默认语句。
如果你定义了一个什么都不说的方法:
def test
end
rails会调用:render action: :name_of_method
您需要使用重定向和unless
:
redirect_to users_url, notice: 'user not found' unless @user
祝你好运!