基于this previous question that I asked,我理解在布尔字段上不可能使用标准范围的唯一性。使用布尔值,您必须使用包含验证,但是我无法弄清楚如何将包含范围扩展到表中的另一个字段。
这是我能想到的最简单的描述方式。
我有app_settings
和app_setting_options
个表格。 app_settings
需要app_option_option
,user_id
,user_role_id
,group_id
,event_id
或app_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
具有最后一个范围的唯一性的语法是什么?
答案 0 :(得分:0)
我可能会误解这个问题,但如果您希望在app_setting
为user_id
时允许一个app_level_setting
与true
app_setting
,user_id
当app_level_setting
为false
时,如果给定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有一些关于如何执行此操作的文档。