我正在将我的Rails 3项目转换为Rails4,但我对DECLARE @DATE NVARCHAR(20) = '2017/01/15'
IF (CAST(getdate() AS DATE) > CAST(@DATE AS DATE))
PRINT 'Selected date is in past'
ELSE IF (CAST(getdate() AS DATE) = CAST(@DATE AS DATE))
PRINT 'Selected date is today'
ELSE
PRINT 'Selected date is in future'
感到困惑。
以下是strong parameter
Rails 3
工作正常。但是在我series_mission = SeriesMission.create({name: params[:name], mode: Mission.mode_mapping(params[:mode].to_s), start_time: start_time, end_time: end_time, gamecharacter_id: gc.id}, :without_protection => true)
修改成这种方式后,它出了问题。
Rails 4
它抛出了这个错误
attrs = { name: params[:name], mode: Mission.mode_mapping(params[:mode].to_s), start_time: start_time,
end_time: end_time, gamecharacter_id: gc.id }
attrs = attrs.require(:series_mission).permit(:name, :mode, :start_time, :end_time, :gamecharacter_id)
series_mission = SeriesMission.create(attrs)
private method `require' called for #<Hash:0x007fd2a421e8b8>
仅qset_ids = params[:sub_missions]
start_time = ((t = params[:start_time].to_i) == 0 ? nil : Time.at(t))
end_time = ((t = params[:end_time].to_i) == 0 ? nil : Time.at(t))
gamecharacter_id
答案 0 :(得分:0)
你误解了强参数的目的。它们用于白名单传入数据。但是既然你已经这样做(通过构建那个哈希),你就不需要强大的参数。
attrs = { name: params[:name], mode: Mission.mode_mapping(params[:mode].to_s), start_time: start_time,
end_time: end_time, gamecharacter_id: gc.id }
series_mission = SeriesMission.create(attrs)
想象一下,您有一个个人资料编辑页面。在那里你可以改变名称和图片。您应用中的某些用户可以是管理员。此状态由db中的布尔列is_admin
控制。当然,您无法通过该配置文件编辑UI使用户成为管理员,因为它没有复选框。但是,恶意用户可以伪造他们喜欢的请求并发送数据,就好像那样这样的复选框。而你会盲目地接受它并让他们成为管理员。
使用强大的参数,您白名单要处理的数据
params.require(:user).permit(:name, :picture)
在这里,即使请求中存在is_admin
param,它也会被丢弃而不会在更新操作中使用。
正如您所看到的,您的问题中的代码不会受此影响,因为存在“自然”白名单。
答案 1 :(得分:0)
强对数仅用于质量分配。看到您手动传递每个单独的属性,您根本不需要使用强参数。这将有效:
attrs = { name: params[:name], mode: Mission.mode_mapping(params[:mode].to_s), start_time: start_time,
end_time: end_time, gamecharacter_id: gc.id }
series_mission = SeriesMission.create(attrs)