我对Rails真的很陌生,我想知道如何做到以下几点:
在用户为sin(=文章)撰写评论后,作者(=用户)应该将20分(例如)添加到他的分数(= user.score)中。得分是我的用户表中的一列。
我的模特看起来像这样:
class User < ActiveRecord::Base
has_many :comments, :dependent => :destroy
has_many :absolutions, :dependent => :destroy
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :sin
end
class Sin < ActiveRecord::Base
has_many :comments, :dependent => :destroy
end
我的评论控制器看起来像这样:
class CommentsController < ApplicationController
def new
@comment = Comment.new
end
def create
@sin = Sin.find(params[:sin_id])
@comment = current_user.comments.build(params[:comment])
@comment.sin_id = @sin.id
if @comment.save
flash[:success] = "Comment created!"
redirect_to sin_path(@sin)
else
flash[:error] = "Comment was not created."
redirect_to sin_path(@sin)
end
end
end
花了几个小时自己拿到这个,我有点困惑。创建评论后,我想更改关联对象用户的特定值。
最好的方法是什么?
感谢您的帮助!
答案 0 :(得分:1)
你可以在保存后添加它:
if @comment.save
flash[:success] = "Comment created!"
current_user.score += 20
current_user.save
redirect_to sin_path(@sin)
else
但是,在你的模型中做它总是更好。所以我会在你的用户模型中创建一个add_score实例方法并在那里更新分数。然后,我只是在控制器中,在同一个地方调用该方法。
答案 1 :(得分:1)
在评论模型中定义after_save
回调:
class Comment < ActiveRecord::Base
[...]
after_save :add_score
private
def add_score
self.user.score += 20
self.user.save
end
end
答案 2 :(得分:0)
您可以在评论模型中使用after_create回调来对相应的用户进行更改吗?
这种逻辑不属于控制器。