Forum: Ruby on Rails Ajax in Rails

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-01 17:52
(Received via mailing list)
Hi All,

New to the group, and new to learning rails.

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?

Here is my form:

<% form_remote_for @advert do |a| %>
<label>Title:</label> <%= a.text_field :title %>
<br />
<label>First Line:</label> <%= a.text_field :first_line %>
<br />
<label>Second Line:</label> <%= a.text_field :second_line %>
<br />
<label>Visible URL:</label> <%= a.text_field :visible_url %>
<br />
<label>Destination URL:</label> <%= a.text_field :destination_url %>
<%= submit_tag 'Submit' %>
<% end %>

Any help would be great?

Cheers,

Phil
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 18:01
(Received via mailing list)
On Mar 1, 1:04 pm, phil7085 <p....@btopenworld.com> wrote:
>
> 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.

Fred
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-01 18:11
(Received via mailing list)
So then do I need to use the controller to populate another @advert
object with all the params then render the partial?

Cheers,

Phil

On Mar 1, 5:00 pm, Frederick Cheung <frederick.che...@gmail.com>
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 20:32
(Received via mailing list)
On Mar 1, 5:10 pm, phil7085 <p....@btopenworld.com> wrote:
> 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.

Fred
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-01 20:39
(Received via mailing list)
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


Phil

On Mar 1, 7:31 pm, Frederick Cheung <frederick.che...@gmail.com>
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 20:41
(Received via mailing list)
On Mar 1, 7:38 pm, phil7085 <p....@btopenworld.com> wrote:
> 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).

Fred
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-01 21:13
(Received via mailing list)
Thanks Fred,

How would I then need to tell rails to use the @advert object because
that's the part that I have been having trouble with?

Phil

On Mar 1, 7:41 pm, Frederick Cheung <frederick.che...@gmail.com>
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 21:39
(Received via mailing list)
On Mar 1, 8:12 pm, phil7085 <p....@btopenworld.com> wrote:
> Thanks Fred,
>
> How would I then need to tell rails to use the @advert object because
> that's the part that I have been having trouble with?
>

render :partial => 'blah', :object => foo

Fred
Aafa8848c4b764f080b1b31a51eab73d?d=identicon&s=25 Phlip (Guest)
on 2009-03-01 21:39
(Received via mailing list)
phil7085 wrote:

> How would I then need to tell rails to use the @advert object because
> that's the part that I have been having trouble with?

Formerly, it was this:

  def preview
    @advert = Advert.new(params[:advert])
    render :partial => 'advert', :locals =>{ :@advert => @advert }
  end

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:

    render :partial => 'advert', :locals =>{ :advert => @advert }

Does anyone know if the :@ trick should still work?

--
   Phlip
Aafa8848c4b764f080b1b31a51eab73d?d=identicon&s=25 Phlip (Guest)
on 2009-03-01 21:43
(Received via mailing list)
Frederick Cheung wrote:

> render :partial => 'blah', :object => foo

To save me from Googling for "object", what does that look like inside
the partial?
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-01 21:45
(Received via mailing list)
On Mar 1, 8:42 pm, Phlip <phlip2...@gmail.com> wrote:
> Frederick Cheung wrote:
> > render :partial => 'blah', :object => foo
>
> To save me from Googling for "object", what does that look like inside the partial?

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)

Fred
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-01 22:00
(Received via mailing list)
Thanks,

I will give this a try, although as a newbie this talk
of :locals, :object, etc has slightly gone over my head. I'm sure i'll
get it.

Phil
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-02 09:23
(Received via mailing list)
Hi guys,

I've tried both of those options and can't get it to work, I think
it's the way I am trying to retrieve the values in the partial.

In the development.log I have this error: undefined method `title' for
#<HashWithIndifferentAccess:0x1f7f930>

In my controller I have this:

render :partial => 'advert', :object => @advert

And in my partial I have tried both if these:

<%= advert.title %>
<%= @advert.title %>

No luck.

Any suggestions?

Phil
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-02 09:39
(Received via mailing list)
Ok I've got it to work by using this in my partial:

<%= @advert[:title] %>

Can you tell me why I have to reference like this?

Phil
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-02 10:14
(Received via mailing list)
On Mar 2, 8:39 am, phil7085 <p....@btopenworld.com> wrote:
> Ok I've got it to work by using this in my partial:
>
> <%= @advert[:title] %>
>
> Can you tell me why I have to reference like this?
>
The errors you mentionned imply that @advert isn't actually an
instance of the Advert class.

Fred
Ba6a01eaf81abbd6c3fc27a3c9d2cd09?d=identicon&s=25 phil7085 (Guest)
on 2009-03-02 10:19
(Received via mailing list)
Ok Fred, I think I understand, I've now changed the controller to look
like this:

  def preview
    @advert = Advert.new(params[:advert])
    render :partial => 'advert', :object => @advert
  end

Before I had: @advert = params[:advert]  which I think is what you
mean by it not being an instance of the class.

Now in my partial I can use @advert.title and all works fine.

Thanks for all your help.

Phil


On Mar 2, 9:13 am, Frederick Cheung <frederick.che...@gmail.com>
This topic is locked and can not be replied to.