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 ответ:
Чтобы инициализировать атрибут представления Post до нуля, Перед вызовом @post.сохранить (как побочный эффект оператора if):
@post.view = 0
Затем в действиях контроллера, которые отображают запись, вам нужно будет обновить атрибут представления записи на 1. Это будет иметь проблемы, если несколько человек обращаются к странице одновременно между чтением и записью базы данных, но это, по крайней мере, поможет вам двигаться в правильном направлении.
Присвоения
@view
здесь значениям после сохранения базы данных ничего не делают.