I'm having some trouble, i've done a few tutorials on creating some
small apps with rails and am now starting to play around myself.
I've been trying to create a simple form which when a user enters any
data that data is displayed as a preview elsewhere on the page
instantly, just like when creating an advert with Google Adwords, the
preview is shown.
I've been using form_remote_for and observe_form but I don't seem to
be having much luck at all. I am unsure how to use the controller to
get the form fields and pass them back to a partial to be rendered?
I've been trying to create a simple form which when a user enters any
data that data is displayed as a preview elsewhere on the page
instantly, just like when creating an advert with Google Adwords, the
preview is shown.
I've been using form_remote_for and observe_form but I don't seem to
be having much luck at all. I am unsure how to use the controller to
get the form fields and pass them back to a partial to be rendered?
In this respect it's much like a normal form, eg the title will be
params[:advert][:title] (assuming @advert is of class Advert). As
usual you can just looking at development.log to see what the
parameters look like.
So then do I need to use the controller to populate another @advert
object with all the params then render the partial?
Well I don't know exactly what this controller is trying to do at all.
Assuming what it's doing is create a new object then the controller
code is almost exactly the same as a regular create action, the only
difference is that instead of redirecting to the show action you're
rendering a partial for the object you've just created.
I am simply trying to show what the user enters somewhere else on the
page as they type it.
I did get it to work using render :text => param[:advert][:title] +
'<br/>' + param[:advert][:first_line] ......
But I think there should be a more efficient way to do it?
Could I do something like this:
def preview
@advert = Advert.new(params[:advert])
render :partial => 'advert'
end
Something like that is fine (although you'll need to tell rails to use
the @advert object). It's not more efficient in terms of raw cpu
cycles but I'm assuming that's not what you meant (it is a lot easier
on the eye and a better separation of presentation from your actual
code).
I prefer that style because it makes @advert, inside the partial, safe to test for nil. However, on our latest new project (Rails 2.2.2) either we did something else wrong, or the :@ stopped working, and we had to use this:
the object specified in that way is assigned to a local variable
called object and to a local variable called after the partial (ie the
same thing that happens when you do :collection => foos) (or using the
name specified in the :as option)