我在评估模型中有scope方法,我在AssessmentsController中对评估集合调用了这个方法,但是我不能为这个方法创建测试,因为: 1)响应时我没有得到risk_value,但是在控制器(@assessments.with_assessment_progresses(@customer_id))中我得到了以下内容:
[
{
"id": 4,
"name": "Assessment_1",
"created_at": "2020-04-01T17:29:50.528Z",
"updated_at": "2020-04-01T17:29:50.528Z",
"risk_value": "3.92156862745098"
},
...
]2)我不明白如何从结果中删除created_at和updated_at。
app/models/assessment.rb
scope :with_assessment_progresses, ->(customer_id) {
joins(Arel.sql("LEFT JOIN assessment_progresses ON (assessment_progresses.assessment_id = assessments.id AND assessment_progresses.customer_id = #{customer_id})")).
select("assessments.*, assessment_progresses.risk_value")
}spec/models/assessment_spec.rb
describe "Method 'with_assessment_progresses'" do
let!(:admin) { create(:admin) }
let!(:customer) { create(:customer, created_by: admin.id) }
let!(:assessment) { create(:assessment) }
let!(:assessment_progress_1) { create(:assessment_progress, customer_id: customer.id, assessment_id: assessment.id, risk_value: 3.812) }
it "return assessments with risk_value for customer" do
assessment_with_risk = Assessment.with_assessment_progresses(customer.id)
assessment_with_risk.delete("created_at")
assessment_with_risk.delete("updated_at")
expect(assessment_with_risk.length).to eq(1)
expect(assessment_with_risk).to eq(
[
{
"id"=> assessment.id,
"name"=> assessment.name,
"risk_value"=> assessment_progress_1.risk_value
}
]
)
end
end发布于 2020-04-08 15:10:06
你用
.select("assessments.*, assessment_progresses.risk_value")created_at和updatet_at来自于assessements.*,这些列自动为活动记录模型生成。如果您只想要某些值,则只选择
.select("assessments.id, assessments.name ,assessment_progresses.risk_value")发布于 2020-04-08 16:37:07
我解决了这个问题:
Assessment.with_assessment_progresses(customer.id).as_json我用以下方式删除时间戳:
object.each{ |h| h.delete("updated_at") && h.delete("created_at")}https://stackoverflow.com/questions/61102464
复制相似问题