Rails: как реализовать количество просмотров записей?


В чем проблема?:

Я создаю общий блог и работаю над созданием основных функций. Проблема в том, что вид (сколько людей видели тот или иной пост) не отображается правильно.

Состояние искусства: .

На данный момент у меня есть два контроллера/модели: Post и Comment. Я предоставлю вам свою схему, чтобы помочь вам лучше понять ситуацию.

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

Что я сделал: В почтовом контроллере я попытался чтобы инициализировать представления, устанавливая его в 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

И пост должен иметь возможность показать свое количество просмотров. Так и в шоу.формат html.erb файл сообщения, я добавил часть ниже, а также. <p> <b>views:</b> <%= @post.view %> </p>

Как это не работает: Количество просмотров просто не показывается вообще. Я проверил базу данных, и столбец был пустым, даже если я пытался инициализировать его до 0 всякий раз, когда пользователь добавляет сообщение. Я предполагаю, что есть проблема с тем, как я пытаюсь получить доступ к переменной "вид"? Разве это не правильно, чтобы получить доступ к нему, делая
@view = @ post.вид?

Я знаю о том, что мне придется рассмотреть, если пользователь, который уже видел сообщение, вернется, но я еще не знаю, как именно получить доступ к переменной view/инициализировать/увеличить ее.

я очень ценю вашу помощь заранее!

-Max

1 4

1 ответ:

Чтобы инициализировать атрибут представления Post до нуля, Перед вызовом @post.сохранить (как побочный эффект оператора if):

@post.view = 0

Затем в действиях контроллера, которые отображают запись, вам нужно будет обновить атрибут представления записи на 1. Это будет иметь проблемы, если несколько человек обращаются к странице одновременно между чтением и записью базы данных, но это, по крайней мере, поможет вам двигаться в правильном направлении.

Присвоения @view здесь значениям после сохранения базы данных ничего не делают.