Forum: Ruby on Rails Problem with presentation of error messages and multiple objects

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Stefan Frede (Guest)
on 2009-02-21 03:15
(Received via mailing list)

I have a problem with the presentation of error messages for multiple
objects. The validation works fine and if errors occure they will all
be presented, but only for one object at a time. When I submit my form
the occuring errors will be presented and if I fix them and submit the
form again the errors for the next form will be presented and so on.

I don't know what I have to do to show all errors for all objects at

In my view template I use <%= error_messages_for payment,
subscription, user %>.

This is how my create method looks like:

def create
  @payment =[:payment])
  @subscription =[:subscription])
  @user =[:user])

  @service =, @user, @payment)

    flash[:notice] = 'Subscription was successfully created.'
    redirect_to root_url
    render :action => "new"

This is how my SubscriptionService looks like:

class SubscriptionService

  attr_reader :payment, :subscription, :user

  def initialize(subscription, user, payment)
    @payment = payment
    @user = user
    @subscription = subscription

  def save
    return false unless valid?
      Subscription.transaction do
        if @payment.new_record?
          @payment.subscription = @subscription
        if @user.new_record?
          @user.subscription = @subscription

  def valid?
    @payment.valid? && @subscription.valid? && @user.valid?

I think this is pretty basic code and I already found out that the
presentation has something to do with valid? method in the
SubscriptionService but as I said I don't know how and where to
collect all error messages and present them at once.

Many thanks in advance.

Maurício L. (Guest)
on 2009-02-22 05:36
(Received via mailing list)
You haven`t showed your view code, so i`m assumming that every object
has it`s own "place", so why don't you just add an error_messages_for
every object at the beginning of their part in the form?

Maurício Linhares (pt-br) |
Stefan Frede (Guest)
on 2009-02-22 09:30
(Received via mailing list)
No, it's one form with which I update all of my models. The form
itself belongs to the subscription model.

The subscription model belongs to the payment and user model and the
payment and user model on the other site have one subscription.

I'm trying to get a clue how I can solve this but the only thing I
found out by now is that I'm not the first one with this problem (how
wondering :)) but no solution or at least something that points me in
the right direction (ok, updating to Edge Rails is no solution for me
right now).

Every hint is appreciated.


On 22 Feb., 04:35, Maurício Linhares <removed_email_address@domain.invalid>
Stefan Frede (Guest)
on 2009-02-23 17:43
(Received via mailing list)
For everyone running in something similar. In my case the problem is
how I checked in my SubscriptionService that every model is valid:

def valid?
  @payment.valid? && @subscription.valid? && @user.valid?

The logical and will only check the next operand if the one befor is
true. So, for example, when the first validation fails the next two
validations will not take place.

This is my solution:

def valid?
  valid = true
  valid = false unless @payment.valid?
  valid = false unless @subscription.valid?
  valid = false unless @user.valid?

Perhaps it helps someone.

Regards, Stefan
This topic is locked and can not be replied to.