在Rails中,我可以这样做以获取完整的错误消息(包括属性的名称)
void grab_input(char *infile, int *rows, int *cols, char *buffer);
void send_output(char *outfile, int rows, int cols, char buffer);
int process_input(char *buffer);
int main(int argc, char *argv[])
{
int rows;
int cols;
int i;
char **buffer;
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
buffer = (char**)malloc((rows + 2) * sizeof(char *));
for (i = 0; i < rows; i++)
buffer[i] = (char *)malloc(cols*sizeof(char));
grab_input(argv[1], &rows, &cols, &buffer);
process_input(&buffer);
send_output(argv[2], rows, cols, *buffer);
printf("\n%s\n", argv[2]);
printf("%d\n", cols);
return 0;
}
void grab_input(char *infile, int *rows, int *cols, char *buffer)
{
FILE *input;
input = fopen(infile, "r");
if (input != 0)
printf("The file exists.\n");
else
printf("No file.\n");
fscanf(input, "%d %d", rows, cols);
printf("Unprocessed grid:");
while (fgets(buffer, (*rows+2) * (*cols+2) * sizeof(char)+1, input) != NULL) {
printf("%s", buffer);
}
fclose(input);
printf("\nRows: %d\nColumns: %d\n", *rows, *cols);
}
我的问题是,如何针对特定属性做同样的事情?
我不能这样做:
book.errors.full_messages.each do |err|
puts err
end
至于现在这就是我正在做的事情
book.errors[:title].full_messages
我期待着有更好的方式
答案 0 :(得分:2)
要获取特定属性的完整错误消息,请使用full_messages_for:
book.errors.full_messages_for(:title)
答案 1 :(得分:1)
我认为这种策略是恰当的。即使您指定了特定属性,errors方法也始终返回一个数组,因为可能存在与单个属性关联的多个错误。如果只有book
的一个属性包含错误(比如:title
属性),则这两种方法的输出之间应该没有区别:
book.errors.full_messages.each do |err|
"#{err}"
end
book.errors[:title].each do |err|
"#{err}"
end