我试图将作者的用户名添加到我博客中的帖子中,以便以后能够验证尝试更改该帖子的用户是该帖子的原始作者。但是,它不起作用,并且由于当前用户在页面上显示当前登录用户的用户名,因此即使当前用户确实存在,它也会返回错误“验证失败:用户必须存在”。< / p>
错误日志:
Validation failed: User must exist
@post = Post.new(post_params)
@post[:author] = current_user.username
->> if @post.save!
flash[:success] = "Post created."
redirect_to post_path(@post.id)
else
应用程序控制器(在其中声明current_user的地方):
class ApplicationController < ActionController::Base
helper_method :current_user
helper_method :require_user
def current_user
return unless session[:user_id]
current_user ||= User.find(session[:user_id])
end
def require_user
redirect_to '/login' unless current_user
end
end
发布模型:
class Post < ApplicationRecord
has_many :comments
belongs_to :category
belongs_to :user
end
模式:
create_table "posts", force: :cascade do |t|
t.string "title"
t.integer "category_id"
t.string "author"
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
我执行Vasilisa所说的错误:
ActiveRecord::AssociationTypeMismatch (User(#47015106648260) expected, got "test" which is an instance of String(#47015080074780)):
def create
@post = current_user.posts.build(post_params)
==> @post.author = current_user.username
if @post.save
flash[:success] = "Post created."
redirect_to post_path(@post.id)
答案 0 :(得分:1)
帖子模型belongs_to :user
,在ROR 5中,此关联会自动验证状态。这就是为什么您得到“验证失败:用户必须存在”的原因。看起来您想将帖子的用户存储为author
在数据库中。
在迁移中更改您的帖子表
def change
remove_column :posts, :author, :string
add_reference :posts, :author
end
在“发布”模型中,将belongs_to :user
更改为belongs_to :author, class_name: 'User'
添加到用户模型
has_many :posts, foreign_key: :author_id
之后,您只需在控制器中写入current_user.posts
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Post created."
redirect_to post_path(@post.id)
else
render :new
end
end
然后,请再次阅读有关associations in Rails
的信息