我想测试一下letrate生成的控制器。 但我不知道这是怎么回事,因为我无法理解它是如何运作的。 的 rater_controller.rb
class RaterController < ApplicationController
def create
if user_signed_in?
obj = params[:klass].classify.constantize.find(params[:id])
obj.rate params[:score].to_i, current_user, params[:dimension]
render :json => true
else
render :json => false
end
end
end
更新
Letsrate是rails的宝石
rater_controller_spec.rb
require 'rails_helper'
describe RaterController do
describe 'POST create' do
let(:valid_attributes)do {
klass: 'Hotel',
dimension: 'rating',
score: '5'
}
end
it 'user signed in' do
user = create(:user)
hotel = create(:hotel)
post :create, { rate: valid_attributes, rater_id: user.id, rateble_id: hotel.id }
sign_in user
end
end
end
答案 0 :(得分:1)
您发布的源代码非常明显它是如何工作的。你需要在RaterController中使用这些参数调用create动作:klass,id,score,dimension。假设klass param是“Restaurant”,它也是ActiveRecord模型类的名称。控制器将在数据库中查询具有指定ID的餐馆。然后它将使用指定的参数调用该对象上的rate
方法,这可能会在数据库中插入一行代表用户的新评级。要测试它,您可以简单地调用控制器操作,然后检查以确保该行已添加到数据库中。