Forum: Ruby on Rails Values not being being reflected on page after validation error but model has the values

Posted by rubyrookie (Guest)
on 2012-12-10 06:54
(Received via mailing list)
I have a relationship where a merchant can have multiple payments. I am
posting payments to a merchant and there is a validation error. Payment
object does have the values retained. Can some one help me fix the 
issue?

View Code->

<%= @merchant.name %>

<%= form_for([@merchant, @merchant.payments.build]) do |f| %>

<% if @payment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@payment.errors.count, "error") %> prohibited this
payment from being saved:</h2>

<ul>
<% @payment.errors.full_messages.each do |msg| %>
<li>
<%= msg %>
</li>
<% end %>
</ul>
</div>
<% end %>

test
// Prints the values correctly
<%= @payment.credit_card_number %>
<%= @payment.zip %>
<%= @payment.country %>

<div class="field">
<%= f.label :credit_card_number   %>
<br />
<%= f.text_field :credit_card_number , :autocomplete => "off" %>
</div>
<div class="field">
<%= f.label :address_line_2 %>
<br />
<%= f.text_field :address_line_2 %>
</div>
<div class="field">
<%= f.label :city %>
<br />
<%= f.text_field :city %>
</div>
<div class="field">
<%= f.label :zip %>
<br />
<%= f.text_field :zip %>
</div>
<div class="field">
<%= f.label :country %>
<br />
<%= f.text_field :country %>
</div>

<div class="actions">
<%= f.submit %>
</div>
<% end %>

Controller code->

class PaymentsController < ApplicationController
  # GET /merchants/1
  # GET /merchants/1.json
  def new
    @payment = Payment.new
    @merchant = Merchant.find(params[:merchant_id])
    respond_to do |format|
      format.html # show.html.erb
    end
  end

  def index

    if params[:merchant_id]
      @payments =  Merchant.find(params[:merchant_id]).payments
    else
      @payments = Payment.all
    end

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @merchants }
    end
  end

  def create
    @merchant = Merchant.find(params[:merchant_id])
    @payment = @merchant.payments.create(params[:payment])

    respond_to do |format|
      if @merchant.save
        format.html {redirect_to merchants_path}
      else
        format.html { render action: "new" }

      end
    end

  end

end
Posted by Jim ruther Nill (jimboker)
on 2012-12-10 06:59
(Received via mailing list)
On Mon, Dec 10, 2012 at 1:53 PM, rubyrookie <asajnani@gmail.com> wrote:

> <% if @payment.errors.any? %>
> </ul>
> <%= f.label :credit_card_number   %>
> <br />
> <%= f.text_field :country %>
>   # GET /merchants/1
>
>   end
>
>       end
>     end
>
>   end
>
> end
>

what error do you get?


>
>
>



--
Posted by rubyrookie (Guest)
on 2012-12-10 07:27
(Received via mailing list)
No error . Validation error is populated but form does not retain 
values.
Payment object has the values though.
Posted by Jim ruther Nill (jimboker)
on 2012-12-10 08:10
(Received via mailing list)
On Mon, Dec 10, 2012 at 2:26 PM, rubyrookie <asajnani@gmail.com> wrote:

> No error . Validation error is populated but form does not retain values.
> Payment object has the values though.
>

This is still confusing.  What exactly do you want to do?

   - Show the validation errors on the form page?
   - Fix the payment process because you don't know what validations are
   failing?
   - retain the values passed by the user when validations fail?



>>
>> <%= msg %>
>> <%= @payment.country %>
>> </div>
>> <div class="field">
>> Controller code->
>>   end
>>       format.html # index.html.erb
>>         format.html {redirect_to merchants_path}
>>  --
>
>



--
Posted by Jim ruther Nill (jimboker)
on 2012-12-11 01:37
(Received via mailing list)
On Mon, Dec 10, 2012 at 3:16 PM, rubyrookie <asajnani@gmail.com> wrote:

>>> values. Payment object has the values though.
>>
>>
It would've helped if you somehow bolded your answers. anyway, you 
should
be able to do that by
changing this line

<%= form_for([@merchant, @merchant.payments.build]) do |f| %>

to

<%= form_for([@merchant, @payment]) do |f| %>

Good luck!


>>>>
>>>> <% @payment.errors.full_messages.****each do |msg| %>
>>>> <%= @payment.credit_card_number %>
>>>>  <br />
>>>> <%= f.text_field :zip %>
>>>> <% end %>
>>>>       format.html # show.html.erb
>>>>
>>>>     respond_to do |format|
>>>> end
>>>
>> visit my blog at http://jimlabs.heroku.com
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by rubyrookie (Guest)
on 2012-12-11 01:46
(Received via mailing list)
Thank you very much. I will read up on the difference. Sorry should have
bolded my answers.
Posted by Jim ruther Nill (jimboker)
on 2012-12-11 01:49
(Received via mailing list)
On Mon, Dec 10, 2012 at 3:42 PM, rubyrookie <asajnani@gmail.com> wrote:

> Thank you very much. I will read up on the difference. Sorry should have
> bolded my answers.


No worries.  If you're looking for the difference, @payment (as you 
already
know) uses the same
record as the one you have in your controllers.  If you use
@merchant.payments.build, you're
creating a new payment record which does not contain the values 
submitted
by the user :)


>>>
>>>>
>> It would've helped if you somehow bolded your answers. anyway, you should
>>
>>>>>> View Code->
>>>>>> <ul>
>>>>>> // Prints the values correctly
>>>>>> <%= f.label :address_line_2 %>
>>>>>> <br />
>>>>>> </div>
>>>>>>     respond_to do |format|
>>>>>>     end
>>>>>>
>>>>>>
>>>>> .
>>>> ------------------------------****------------------------------****-
>>> .
>> ------------------------------**------------------------------**-
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Jim ruther Nill (jimboker)
on 2012-12-11 02:22
(Received via mailing list)
On Mon, Dec 10, 2012 at 3:45 PM, Jim Ruther Nill <jvnill@gmail.com> 
wrote:

> already know) uses the same
> record as the one you have in your controllers.  If you use
> @merchant.payments.build, you're
> creating a new payment record which does not contain the values submitted
> by the user :)
>

regarding your question on the field_error_proc. read this one and 
please
don't email users directly :)

http://guides.rubyonrails.org/configuring.html#con...


>>>
>>>>>> values. Payment object has the values though.
>>>>>    fixed.
>>> <%= form_for([@merchant, @payment]) do |f| %>
>>>>>>> am posting payments to a merchant and there is a validation error. Payment
>>>>>>> <h2><%= pluralize(@payment.errors.**coun****t, "error") %>
>>>>>>> <% end %>
>>>>>>>  <%= f.text_field :credit_card_number , :autocomplete => "off" %>
>>>>>>> </div>
>>>>>>>
>>>>>>>   def new
>>>>>>>       @payments =  Merchant.find(params[:**merchan****
>>>>>>>
>>>>>>>       end
>>>>>> To unsubscribe from this group, send email to rubyonrails-ta...@**
>>>>>
>>>> To unsubscribe from this group, send email to rubyonrails-ta...@**
>>>
>> To unsubscribe from this group, send email to
>
> --
> -------------------------------------------------------------
> visit my blog at http://jimlabs.heroku.com
>



--
Posted by rubyrookie (Guest)
on 2012-12-11 02:30
(Received via mailing list)
thanks :)
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.