- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想做的是让一个用户每月只认可 3 个其他用户(如果可能的话,也许每个新月都会清除限制。
我试过按照这个 ror limiting users to 2 posts per day
运气不好。我在我的用户模型中创建了 this_month 方法
def this_month
where(:created_at => (Time.zone.now.beginning_of_month..Time.zone.now))
end
在我的 Endorsements 模型中:
class Endorsement < ActiveRecord::Base
belongs_to :endorser, class_name: "User"
belongs_to :endorsed, class_name: "User"
validates :endorser_id, presence: true
validates :endorsed_id, presence: true
validates :comment, presence: true, length: { maximum: 140}
validate :endorsement_count_within_limit?, :on => :create
private
def endorsement_count_within_limit?
if endorser.endorsing.this_month.count >= 3
errors.add(:base, "Exceeded endorse limit (3) this month")
end
end
end
我在尝试背书时遇到错误
NoMethodError (undefined method `this_month' for #<User::ActiveRecord_Associations_CollectionProxy:0x007fe6bd957fa8>):
app/models/endorsement.rb:11:in `endorsement_count_within_limit?'
app/models/user.rb:113:in `endorse'
app/controllers/endorsements_controller.rb:7:in `create'
我在这里缺少什么?
这是我的用户模型
class User < ActiveRecord::Base
has_many :active_endorsements, class_name: "Endorsement",
foreign_key: "endorser_id",
dependent: :destroy
has_many :passive_endorsements, class_name: "Endorsement",
foreign_key: "endorsed_id",
dependent: :destroy
.
.
.
has_many :endorsing, through: :active_endorsements, source: :endorsed
has_many :endorsers, through: :passive_endorsements, source: :endorser
attr_accessor :remember_token, :activation_token, :reset_token
before_save :downcase_email
before_create :create_activation_digest
validates :name, presence: true, length: { maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
.
.
.
# Endorses a user.
def endorse(other_user, comment)
active_endorsements.create(endorsed_id: other_user.id, comment: comment)
end
# Unendorses a user.
def unendorse(other_user)
active_endorsements.find_by(endorsed_id: other_user.id).destroy
end
# Returns true if the current user is endorsing the other user.
def endorsing?(other_user)
endorsing.include?(other_user)
end
def this_month
where(:created_at => (Time.zone.now.beginning_of_month..Time.zone.now))
end
private
.
.
.
end
背书 Controller :
class EndorsementsController < ApplicationController
before_action :logged_in_user
def create
@user = User.find(params[:endorsed_id])
comment = params[:endorsement][:comment]
current_user.endorse(@user, comment)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
def destroy
@user = Endorsement.find(params[:id]).endorsed
current_user.unendorse(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
end
我已经删除了不必要的(我认为)的东西。如果需要,其余代码(没有添加)位于 https://bitbucket.org/kramarz/pracainzynierska。
最佳答案
看起来 endorsing 是一个集合而不是一个模型,所以它没有你在两个模型上构建的 this_month
方法
尝试更改为
def endorsement_count_within_limit?
if endorser.endorsing.where(:created_at => (Time.zone.now.beginning_of_month..Time.zone.now)).count >= 3
errors.add(:base, "Exceeded endorse limit (3) this month")
end
end
看看它是否解决了这个问题。这可能可以通过将其定义为 scope 来解决。而不是方法
关于ruby-on-rails - ruby rails : Limit user to endorse(comment) 3 other users a month,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999886/
我正在处理一些遗留代码,其中 java.util.Calendar 用于与日期相关的计算(基本上是添加月份)。现在我想在代码中用 java.time.LocalDate 替换 java.util.Ca
我刚刚在我正在学习的类(class)中开始使用 R,到目前为止我所做的是制作一个加载文件的脚本。 如果重要的话,我正在使用 Rstudio 1.0.44 使用 Ubuntu 14.04 运行 R。 我
我正在按月查询在 Laravel 中创建的用户,这是我的代码 $devlist = DB::table("users") ->select("id" ,DB::ra
C++20 计时类型/值之间有什么区别 month{7}和 months{7} ?有两个如此相似的名字是不是很困惑? 最佳答案 是的,同时拥有 month 可能会令人困惑。和 months第一次遇到这
我有一个数据库,其中包含我的用户完成的每个操作,并带有时间戳,如下所示: 用户名 ; Action ; 创建日期 我想评估一段时间内活跃用户的数量。我可以看到每周活跃的用户数 (count (dist
我在我的 Python 脚本中使用了 parsedatetime 库,似乎“上个月”有效,“下个月”但“本月”无效。 我错过了什么?有没有办法获取当月的第一天? 编辑:抱歉,这是一些代码: impor
我发现的大部分信息都不在 python>pandas>dataframe 中,因此是这个问题。 我想将 1 到 12 之间的整数转换为缩写的月份名称。 我有一个 df,它看起来像: client
在用户单击“下个月”或“上个月”后,我需要使用自定义 CSS 重新填充日期选择器。我正在点击 onChangeMonthYear 事件,但不知道用户要去哪条路(下个月或上个月)。有什么简单的内置东西可
我正在尝试计算一个月内产品的总销售额,但我希望它包括任何“空”月份(没有销售额)并且只选择最近的 12 个月。 到目前为止,这是我的代码。 declare @ProductNo int set @Pr
我有一个独特的问题,我根本无法解决。 所以我在 SQL Server 2005 中,我得到了以下要处理的数据: FISCAL_YEAR_START_MONTH INT(财政年度的第一个月) COUNT
我正在进行的一个项目需要获取过去 12 个月中每个月的平均发票总额。我可以通过执行 12 个查询(每月 1 个)轻松获得我需要的内容,但它非常丑陋,我最终得到 12 个唯一变量(id 而不是有一个循环
我希望用更好的不太详细的过程替换以下函数,用于从字符串确定数字月份值。有谁知道是否有可用于此目的的日期/日期时间函数?我没有注意到任何一个可以满足我的需求。 代码中的文本字符串正是我接收它们的方式。
我正在尝试获取过去 12 个月(包括当月)按月分组的记录数。不是从今年年初开始。 我有一个表 EVENTS 和一个字段 WODATE。我能做到 aFDQuery.Connection := Tra
我正在使用moment.js在 angularjs 应用程序中进行日期转换。我要打印Month number作为Month name 。我已经尝试过如下, {{item.ReviewMonth | d
我想通过 JPA 从 Oracle 数据库中选择实体,方法如下: Calendar cal = Calendar.getInstance(); cal.setTime(anOtherDate); Qu
我希望用一个更好的更简单的过程来替换以下函数,以便从字符串中确定数字月份值。有谁知道是否有可用于此的 Date/DateTime 函数?我没有注意到可以满足我的需求的。 代码中的文本字符串正是我接收它
我正在尝试获取过去 12 个月(包括当月)按月分组的记录数。不是从今年年初开始。 我有一个表 EVENTS 和一个字段 WODATE。我能做到 aFDQuery.Connection := Tra
我读到“将日期字符串转换为mysql日期时间字段”:但这对我没有帮助 所以我想做的是将dat文件读入mysql中的空表。 table CLIMBED(TRIP_ID int,PEAK VARCHAR(
我有这样的查询: SELECT EXTRACT(MONTH FROM d.mydate) AS synmonth, SUM(apcp) AS apcptot FROM t_synop_data2 d
一些需要更改 df header 的 Django 格式问题。 测试数据: Test_Data = [ ('Year_Month', ['Done_RFQ','Not_
我是一名优秀的程序员,十分优秀!