当用户查看帖子或该帖子仍未被用户查看时,我需要将帖子标记为已读/未读。对于此任务,我使用了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();
})
});
答案 0 :(得分:0)
您需要做的是代替$(".read_text").hide();
您应该尝试获取父well元素,并使用它遍历到适当的子.read_text
元素。
`
$(".btn1").click(function(){
$(this).parent().find(".read_text").css( "display", "none" );
})
`