我想列出登录用户信息中心中最近查看的属性。
因此,我创建了一个名为recentview的表,包含3个字段,即; user_id,property_id和view_time(将在单击该属性时在表中输入当前视图时间)。 我试过下面的代码。但问题是它在同一个属性的每次点击中多次输入相同的记录。我需要的是,如果我单击一个应该在表中输入的属性,并且在下一次单击同一属性时,相同属性记录的view_time应该更新。
<% if current_or_null_user.recentviewed? property %>
<a href = "<%=recentviews_path(:id => property.id)%>" data-method="post" ><div class="img-blocks" style="background-image:url(<%= property.image.url(:thumbnail)%>)"></div></a>
<% else %>
<a href = "<%=recentviews_path(:id => property.id)%>" data-method="post" > <div class="img-blocks" style="background-image:url(<%= property.image.url(:thumbnail)%>)"></div></a>
<%end%>
点击属性当前时间,property_id和user_id存储在数据库中 我的控制器
class RecentviewsController < ApplicationController
before_action :authenticate_user!, except: :create
def create
if user_signed_in?
@views = Recentview.where(user_id: current_user.id, property_id: params[:id],view_time: Time.now.strftime("%d/%m/%Y %H:%M")).first_or_create
redirect_to :back
else
redirect_to new_user_session_path, alert: 'Please login/Sign up to add this property to your favourite.'
end
end
end
我的模特
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :properties
has_many :recentviews
has_many :recentviewed_properties, through: :recentviews, source: :property
def recentviewed? property
recentviewed_properties.include? property
end
end
class Recentview < ActiveRecord::Base
belongs_to :user
belongs_to :property
end
class Property < ActiveRecord::Base
belongs_to :user
has_many :recentviews
mount_uploader :image, ImageUploader
end
请提供解决此问题的解决方案。 我将如何更新每次点击中的view_time,以及我将如何避免在recentviews表中使用相同属性的多个条目 任何帮助都是值得赞赏的
答案 0 :(得分:0)
@views = Recentview.where
(user_id: current_user.id, property_id: params[:id],
view_time: Time.now.strftime("%d/%m/%Y %H:%M")).first_or_create
在这一行中(为了便于阅读,现在拆分为3),您将始终在数据库中创建新的RecentView
记录,因为Time.now
将始终具有新值(与现有记录相比)。
也许你可以试试:
@recent_view = Recentview.where(user_id: current_user.id, property_id: params[:id]).first_or_create
然后,一旦找到记录或创建了新记录,就可以将view_time
设置为:
@recent_view.update(view_time: Time.now.strftime("%d/%m/%Y %H:%M"))
使用这种方法,您应该无意中创建多个记录。