【发布时间】:2018-05-03 18:38:11
【问题描述】:
我有三个模型:任务、用户和响应。
当用户完成一项任务时,结果将存储为响应。在该响应时间内,用户将获得积分。
我的第一个问题是,更新积分属性的逻辑应该去哪里?在任务、用户或响应模型中?目前,我在 Response 模型中有它,它获取 Response.task.points 并将该值添加到 User.task.points。
Response.create 然后看起来像:
# POST /responses
# POST /responses.json
def create
@response = Response.new(response_params)
respond_to do |format|
if @response.save
@response.reward_user
format.html { redirect_to @response, notice: 'Response was successfully created.' }
format.json { render :show, status: :created, location: @response }
else
format.html { render :new }
format.json { render json: @response.errors, status: :unprocessable_entity }
end
end
end
第二件事是我想记录每笔积分交易。所以我创建了另一个名为 points_transaction 的模型。我的另一个问题是,我应该在哪里创建 points_transaction?在 Response.create 控制器中?在响应模型中?
从 Response 创建方法中创建 PointsTransaction 似乎是错误的,但从模型中创建它似乎同样错误。哪一个更符合 MVC?
我的 Response 对象如下所示:
class Response < ApplicationRecord
belongs_to :task, optional: true
belongs_to :user, optional: true
def reward_user
point_value = task.point_value
user.points += point_value
PointTransaction.new({/*params go here*/})
end
end
【问题讨论】:
-
你有一个很好的问题。我认为你已经达到了一个点,当你需要进入下一个层次的架构解决方案时:)
标签: ruby-on-rails activerecord model-view-controller ruby-on-rails-5