私はコメントと返信scaffoldsを持っています。Railsカスタムフォーラムを構築する
テーブル「コメント」は、フォーラムの「投稿」テーブルの役割を果たします。それをリファクタリングするのは難しいので、私はこの名前を残しました。これは私が返事を作成する方法です
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を表示する必要があります。
返信をその投稿に直接リンクする方法があると思います。あなたは私の試行を見ることができます(コメント付きの行は作成関数内にあります)が動作していないので、schema.rbから始まる変更がいくつかあると思います。リファクタリングにどのようにアプローチするかアドバイスできますか?
Couldn't find Comment with 'id'=post_id
そして、私は次の行をどうするかわからない:
#@reply = @comment.replies.create(:user_id, :anonymous, :text, :post_id, :title).permit(:reply)
私は本当にない私は@comment = Comment.find(:post_id)
のコメントを外したときに、私はエラーを取得する
- 私のschema.rbに@ comment.repliesテーブルまたはインスタンスがあります。どうすれば達成できますか?
私はあなたが他の方法で物事を得ていると思います。コメントは実際には投稿またはスレッドです。そして返信はスレッド(投稿)@SRack内の実際のコメントです – Robert
私は次のことを確信しています - 上記のコードを試しましたか?外部キーがモデル名に対応していない場合( 'replies'テーブルに' post_id'があります)、それを指定する必要があります。読みやすくするために上記の代入を切り替えるには、 'a_comment_instance.replies << @ reply'を実行します。 (また、あなたがこの段階で混乱している場合は、データの名前を変更する価値があると言いたいのですが、長期的にはあなたの苦痛を軽減します) – SRack
私はエラーが発生しました 引数の数が間違っています(外部のキーコードと@reply = @ comment.replies.create(:user_id、:anonymous、:text、:post_id、:title).permit(:reply)与えられた5、期待される0..1) – Robert