当用户在Rails中使用AJAX调用查看帖子时如何将其标记为已读

时间:2018-08-20 10:12:40

标签: javascript jquery ruby-on-rails ajax

当用户查看帖子或该帖子仍未被用户查看时,我需要将帖子标记为已读/未读。对于此任务,我使用了AJAX调用。但是,当我在浏览器中查看它时,一旦单击查看帖子按钮,所有帖子都被标记为已读。后控制器:

def show
 @post = @topic.posts.find(params[:id])
 @read_status = @post.Read_status_entry(current_user)
end

发布模型:

class Post < ApplicationRecord
  belongs_to :user
  has_many :read_statuses
  has_many :users,through: :read_statuses

  def Read_status_entry(user)
    self.read_statuses.where(post_id: id, user_id: user.id).first_or_create
  end
end

索引页:

<div class="container" >
  <% @posts.each do |post|%>
    <div class="well">
     <% if ReadStatus.where(" user_id = ? AND post_id = ?",current_user.id,post.id).blank? %>
       <p class="read_text" >Unread</p>
      <%end %>
      <h4><b><%= post.title  %> (<%= post.topic.topicname %>)</b></h4>
      <p><%= post.body %></p>
      <div>
        <%= image_tag post.image.url(:thumb) %>
      </div>
      <%= link_to "View Post", topic_post_path(topic_id:post.topic_id, id:post.id ), :class => 'btn btn-default btn1'%>
    </div>
  <% end %>
</div>

这是查看按钮,单击该按钮时我需要进行ajax调用

<%= link_to "View Post", topic_post_path(topic_id:post.topic_id, id:post.id ), :class => 'btn btn-default btn1'%>

我已将js代码包含在application.js文件中:

$(document).ready(function(){
  $(".btn1").click(function(){
    $(".read_text").hide();
  })
});

1 个答案:

答案 0 :(得分:0)

您需要做的是代替$(".read_text").hide(); 您应该尝试获取父well元素,并使用它遍历到适当的子.read_text元素。 `

$(".btn1").click(function(){
    $(this).parent().find(".read_text").css( "display", "none" );
})

`