Ruby on Rails特定属性的full_messages

时间:2016-02-26 04:06:58

标签: ruby-on-rails

在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

我期待着有更好的方式

2 个答案:

答案 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