4

どうしたの?:

私は一般的なブログを作成しており、本質的な機能の作成に取り組んでいます。問題は、ビュー (特定の投稿を見た人の数) が正しく表示されないことです。

最新技術: .

この時点で、投稿とコメントの 2 つのコントローラー/モデルがあります。状況をよりよく理解できるように、スキーマを提供します。

create_table "comments", :force => true do |t|
t.string   "name"
t.text     "body"
t.integer  "like"
t.integer  "hate"
t.integer  "post_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

add_index "comments", ["post_id"], :name => "index_comments_on_post_id"

create_table "posts", :force => true do |t|
t.string   "name"
t.text     "content"
t.integer  "view"
t.integer  "like"
t.integer  "hate"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

私がやったこと: Post Controller で、誰かが投稿を作成するたびにビューを 0 に設定してビューを初期化しようとしました。

# POST /posts
# POST /posts.json
def create
@post = Post.new(params[:post])
@view = @post.view
@view = 0

respond_to do |format|
  if @post.save
    format.html { redirect_to posts_path, notice: 'success.' }
    format.json { render json: @post, status: :created, location: @post }
    @view = @post.view
    @view = 0
  else
    format.html { render action: "new" }
    format.json { render json: @post.errors, status: :unprocessable_entity }
  end

end

そして、投稿は閲覧数を表示できるはずです。そこで、投稿のshow.html.erbファイルに、以下の部分も追加しました。 <p> <b>views:</b> <%= @post.view %> </p>

機能しない方法: ビューの数はまったく表示されません。データベースを確認したところ、ユーザーが投稿を追加するたびに 0 に初期化しようとしても、列は空白でした。「ビュー」変数にアクセスしようとする方法に問題があると思いますか? @view = @post.viewとしてアクセスするのは正しくありません か?

すでに投稿を見たユーザーが再訪問するかどうかを検討する必要があることは承知していますが、ビュー変数にアクセスする/初期化/インクリメントする方法を正確に理解するまで、まだそこにはいません。

事前にご協力いただき、誠にありがとうございます。

-マックス

4

1 に答える 1

2

@post.save を呼び出す前に、Post のビュー属性をゼロに初期化するには (if ステートメントの副作用として):

@post.view = 0

次に、投稿をレンダリングするコントローラー アクションで、投稿のビュー属性を 1 更新する必要があります。データベースの読み取りと書き込みの間に複数の人が同時にページにアクセスすると問題が発生しますが、少なくとも正しい方向。

データベースを保存した@viewの値への hereの割り当ては、何も達成していません。

于 2012-11-11T01:40:24.993 に答える