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
on 2012-12-10 06:54
on 2012-12-10 06:59
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? > > > --
on 2012-12-10 07:27
No error . Validation error is populated but form does not retain values. Payment object has the values though.
on 2012-12-10 08:10
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} >> -- > > --
on 2012-12-11 01:37
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. > > > --
on 2012-12-11 01:46
Thank you very much. I will read up on the difference. Sorry should have bolded my answers.
on 2012-12-11 01:49
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. > > > --
on 2012-12-11 02:22
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 > --
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
Log in with Google account | Log in with Yahoo account
No account? Register here.