Rails验证:布尔值上的范围唯一性

时间:2015-06-17 17:06:39

标签: ruby-on-rails validation

基于this previous question that I asked,我理解在布尔字段上不可能使用标准范围的唯一性。使用布尔值,您必须使用包含验证,但是我无法弄清楚如何将包含范围扩展到表中的另一个字段。

这是我能想到的最简单的描述方式。

我有app_settingsapp_setting_options个表格。 app_settings需要app_option_optionuser_iduser_role_idgroup_idevent_idapp_level。所有这些都具有范围唯一性验证,因此只能有一个具有特定user_id和特定app_setting_option的记录。问题是app_level字段是布尔值,我不知道如何将该唯一性(真或假)范围限定为app_setting_option

以下是我的验证:

validates :app_setting_option_id, presence: true
validates :user_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :user_role_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :group_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :event_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :app_level_setting, inclusion: { in: [true, false] }, allow_nil: true

具有最后一个范围的唯一性的语法是什么?

1 个答案:

答案 0 :(得分:0)

我可能会误解这个问题,但如果您希望在app_settinguser_id时允许一个app_level_settingtrue app_settinguser_idapp_level_settingfalse时,如果给定scope,您可以将数组用于scope: [:app_setting_option_id, :app_level_setting],例如app_level_setting

如果您希望validate :app_level_setting_scope的范围与其他范围相似,则可能需要手动执行,app_level_setting_scope并创建方法import java.util.Scanner; public class ExerciseConversionList { public static void main(String[] args) { Scanner input = new Scanner(System.in); /*********************************************** * (Conversion from kilograms to pounds and * pounds to kilograms) Write a program that * displays the following two tables side by * side: * * Kilograms Pounds | Pounds Kilograms * 1 2.2 | 20 9.09 * 3 6.6 | 25 11.36 * ... * 197 433.4 | 510 231.82 * 199 437.8 | 515 243.09 ***********************************************/ System.out.print("Kilograms" + "\t" + "Pounds"+ "\t" + "|"+" Pounds"+"\t"+" Kilograms \n"); int limitkg = 198; int limitlb = 516; int kg = 0, i = 1; int lb = 20, j = 5; //loop the list while kilograms is less than 199 and round the result to 1 decimal place. while (kg <= limitkg && lb <=limitlb) { kg = kg + i; lb = lb + j; double conversionkg = Math.round((kg * 2.2) * 10) / 10.0; double conversionlb = Math.round((lb * .453) * 10) /10/0; System.out.println (kg + "\t " + conversionkg +"|"+lb + "\t " + conversionlb);} input.close();}} 以添加错误记录不是唯一的。你必须自己做查询和逻辑。

Rails guides有一些关于如何执行此操作的文档。