我有一个评论和回复支架。
表"评论"扮演论坛的帖子'表。很难重构它,所以我给它留下了这个名字。
schema.rb
create_table "comments", force: :cascade do |t|
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "anonymous"
t.integer "user_id"
t.string "title"
end
create_table "replies", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "anonymous"
t.text "text"
t.integer "user_id"
t.integer "post_id"
t.string "title"
end
模特
class Comment < ApplicationRecord
belongs_to :user, optional: true
validates_presence_of :content, :title
has_many :replies, :dependent => :destroy
end
class Reply < ApplicationRecord
belongs_to :comment, optional: true
validates_presence_of :text, :title
end
这是我创建回复的方式:
def create
#@comment = Comment.find(:post_id)
#@reply = @comment.replies.create(:user_id, :anonymous, :text, :post_id, :title).permit(:reply)
@reply = Reply.new(reply_params)
@reply.user_id = current_user.id
respond_to do |format|
if @reply.save
format.html { redirect_to @reply, notice: 'Reply was successfully created.' }
format.json { render :show, status: :created, location: @reply }
else
format.html { render :new }
format.json { render json: @reply.errors, status: :unprocessable_entity }
end
end
end
您可能会看到数据库关系未正确连接。
要显示帖子及其回复,我必须查看论坛中的所有回复,并显示实例变量post_id == current_post.id的回复。
我认为有一种方法可以将回复直接链接到其帖子。您可以看到我的尝试(在create函数中对它进行了注释)但它不起作用,我认为从schema.rb开始可能需要修改一些内容。你能否告诉我如何进行重构。
@comment = Comment.find(:post_id)
时出现错误:无法找到评论&#39; id&#39; = post_id
我不确定如何处理下一行:
#@reply = @comment.replies.create(:user_id, :anonymous, :text, :post_id, :title).permit(:reply)
我的schema.rb中没有@ comment.replies表或实例。我怎样才能实现它?
答案 0 :(得分:0)
您需要在回复中添加comment_id
列,或在模型中指定foreign_key
,即
class Reply < ApplicationRecord
belongs_to :comment, foreign_key: 'post_id'
...
end
(我删除了optional: true
因为回复需要评论吗?你已经开启了dependent: destroy
所以我猜是这样:))
然后,您需要将评论附加到某处的回复 - 在表单视图中具有id的隐藏字段(确保允许所有参数),或者以与您分配的方式类似的方式回复用户:@reply.comment = a_comment_instance
。
希望有帮助吗?
修改:重新提到您提到的错误,@comment = Comment.find(:post_id)
正在寻找ID为(字面意思):post_id
的评论 - 您的意思是@comment = Comment.find(params[:post_id])
吗?