这是我的第一篇文章,所以我不确定如何设置格式。如果我做错了,请告诉我。
我是Rails的新手,我正在开发一款基本上允许用户向其他用户提交“ grimes”(您可以将其视为评论)的应用。该应用程序有两个基本模型:用户和垃圾。
用户模型:
class User < ApplicationRecord
has_many :grimes
end
污垢模型:
class Grime < ApplicationRecord
belongs_to :user
validates :user, presence: true
end
每个污垢都有一个污点属性,基本上是污垢从1-5的等级。每个用户还具有一个严酷度属性,我想将其作为每个用户关联的网格的严酷度的总和。即。如果user1有两个网格,g1的清晰度为3,g2的清晰度为2,则user1的清晰度应为5。
当我想显示用户的表情时,可以通过遍历用户的每个网格来做到这一点,但这似乎非常不必要。相反,每次添加与它们相关的新污垢时,我都只是想增加用户的清晰度,但是我现在不知道该怎么做。
创建污垢的形式如下所示:
<%= form_for @grime do |f| %>
Title: <%= f.text_field :title %><br />
Description: <%= f.text_area :description %><br />
Griminess Level: <%= f.select :griminess, (0..5) %>
Select Grimer: <%= f.collection_select(:user_id, User.all, :id, :name) %><br />
<%= f.submit %>
<% end %>
我的grimes#create看起来像这样:
def create
@grime = Grime.new(grime_params)
if @grime.save
flash[:success] = "Grime Saved Successfully"
redirect_to @grime
else
flash[:error] = "Error: Could Not Save Grime!"
render :new
end
end
我觉得我应该能够@grime.user.griminess += @grime.griminess
在create方法中做类似的事情,但这似乎对我不起作用。谁能推荐一种更好的方法来解决这个问题?
添加after_save
钩子,只要保存该污垢,Grime
该钩子便会在该污垢上调用方法。
class Grime < ApplicationRecord
after_save :update_user_griminess # register the callback
belongs_to :user
validates :user, presence: true
#callback body
def update_user_griminess
user.griminess = user.grimes.sum(:griminess) # update user griminess as sum of it's all grimes' griminess
user.save
end
end
after_create
ActiveRecord中有一个备用钩子,该钩子在首次创建对象时仅运行一次,但是我更喜欢after_save
在这里进行调整,以适应grime
更新的严峻情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句