Forum: Ruby on Rails Ajax

Posted by Werner (Guest)
on 2012-11-19 15:26
(Received via mailing list)
On my edit page I can update values using ajax.

In my edit action I also have something like: Model.where(model_id:
id).sum("attribute")
As the edit action is not executed anymore, I dont get a proper result
after I add some new value, have to reload the page.

How is the best way to actualize the sum after edit.. ?

Thanks
Posted by Jim ruther Nill (jimboker)
on 2012-11-19 15:31
(Received via mailing list)
On Mon, Nov 19, 2012 at 10:25 PM, Werner 
<webagentur.laude@googlemail.com>wrote:

> On my edit page I can update values using ajax.
>
> In my edit action I also have something like: Model.where(model_id:
> id).sum("attribute")
> As the edit action is not executed anymore, I dont get a proper result
> after I add some new value, have to reload the page.
>
> How is the best way to actualize the sum after edit.. ?
>

Are you updating the values by calling $.ajax or just passing in remote:
true on your forms?

If you use $.ajax, I suggest that you pass in the sum as json which 
$.ajax
can process.  If you're
using remote: true, you can create an update.js.erb or update.js.haml 
which
will be rendered
after you update.


> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-....
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Werner (Guest)
on 2012-11-20 09:55
(Received via mailing list)
Hi jim

As I am using remote: true I created a update.js.erb and a respond_to do
|format| block.
Copied the format html ocde into the update.js.erb and the update 
process
is still working.. so far so good.

But it is unclear to me how to update the
Model.where(model_id: id).sum("attribute") query  which is in edit 
action.

Using html, after update the edit action is called and the query is
refreshed. How to get this working with js?
Something like a submit or refreshing the edit action..?

Thanks for sharing..





Am Montag, 19. November 2012 15:30:42 UTC+1 schrieb jim:
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 10:00
(Received via mailing list)
Hi!

On Tue, Nov 20, 2012 at 4:53 PM, Werner 
<webagentur.laude@googlemail.com>wrote:

> Hi jim
>
> As I am using remote: true I created a update.js.erb and a respond_to do
> |format| block.
> Copied the format html ocde into the update.js.erb and the update process
> is still working.. so far so good.
>
> But it is unclear to me how to update the
> Model.where(model_id: id).sum("attribute") query  which is in edit action.
>

Can you paste in part of the edit template where you use the result of 
this
query?


> Using html, after update the edit action is called and the query is
> refreshed. How to get this working with js?
> Something like a submit or refreshing the edit action..?
>

Can you also paste your edit and update actions so we can work on the 
code
level.


>
> Thanks for sharing..


>>
>> Are you updating the values by calling $.ajax or just passing in remote:
>>> Thanks
>>> 
msg/rubyonrails-talk/-/**RHAW38e5gOwJ<https://groups.google.com/d/msg/rubyonrails-talk/-...
>> ------------------------------**------------------------------**-
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Werner (Guest)
on 2012-11-20 10:47
(Received via mailing list)
Sure..

 def edit
    @booking = Booking.new
    @project = Project.find(params[:id])
    @main_hours = main_hours_sum(@project.id)
  ...
  end

  def main_hours_sum(id)
    Booking.where(project_id: id).sum("hour")
  end

  def update
    respond_to do |format|

      format.js
      end
  end

update.js.erb
<% if params[:booking_ids] %>
<% params[:booking_ids].each do %>
    <% Booking.update(params[:booking].keys,
params[:booking].values).reject { |p| p.errors.empty? } %>
<% end %>

<%end%>






Am Dienstag, 20. November 2012 09:59:58 UTC+1 schrieb jim:
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 11:05
(Received via mailing list)
On Tue, Nov 20, 2012 at 5:46 PM, Werner 
<webagentur.laude@googlemail.com>wrote:

>     Booking.where(project_id: id).sum("hour")
> <% if params[:booking_ids] %>
> <% params[:booking_ids].each do %>
>     <% Booking.update(params[:booking].keys,
> params[:booking].values).reject { |p| p.errors.empty? } %>
> <% end %>
>
> <%end%>
>

You need to move the logic in update.js.erb to the update action.  I was
looking for
the edit template.  I'd like to see how you use the @main_hours 
variable.
 What I'm thinking
is this on this update action and erb.

def update
 @project = ... #fetch project here

  # move your logic in the view here
  # there's something missing here :D
  if params[:booking_ids]
    params[:booking_ids].each do
      Booking.update(params[:booking].keys, 
params[:booking].values).reject
{ |p| p.errors.empty? }
    end
  end

  respond_to do |format|
    format.html
    format.js { @main_hours =  main_hours_sum(@project.id) }
  end
end

# update.js.erb
# use @main_hours to update whatever you need to update on the view

alert('<%= @main_hours %>')


>>
>>> Model.where(model_id: id).sum("attribute") query  which is in edit
>>>
>>>
>>>>>
>>>>
>>>>>
>>>>> For more options, visit 
https://groups.google.com/**grou**ps/opt_out<https...
>>>>
>>> For more options, visit 
https://groups.google.com/**groups/opt_out<https:/...
>>
>
>
>



--
Posted by Werner (Guest)
on 2012-11-20 12:49
(Received via mailing list)
o.k.
Now it is like that:

  def update
    if params[:booking_ids]
      params[:booking_ids].each do
      Booking.update(params[:booking].keys, 
params[:booking].values).reject
{ |p| p.errors.empty? }
      end
    end

    respond_to do |format|
      format.js{
        @project = Project.find(params[:id])
        @main_hours =  main_hours_sum(@project.id)
      }
      end
    end

  def main_hours_sum(id)
    hours ||= Booking.where(project_id: id).sum("hour")
  end


update.js.erb
alert('<%= @main_hours %>')

The alert pops up and shows the correct amount of hours..
Thanks so far.....but I dont have an idea how to update/reset the
@main_hours  on the edit page where it is shown. As I dont leave this 
page,
no request - no update.
May be my understanding of this process is not enough yet.

Greetings



Am Dienstag, 20. November 2012 11:04:53 UTC+1 schrieb jim:
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 13:23
(Received via mailing list)
On Tue, Nov 20, 2012 at 7:48 PM, Werner 
<webagentur.laude@googlemail.com>wrote:

>     end
>   def main_hours_sum(id)
> @main_hours  on the edit page where it is shown. As I dont leave this page,
> no request - no update.
> May be my understanding of this process is not enough yet.
>

If you can show us the code of your edit template, I can help you with 
the
javascript
to update the total number of hours.


>> On Tue, Nov 20, 2012 at 5:46 PM, Werner <webagent...@googlemail.**com>wrote:
>>>   def main_hours_sum(id)
>>> update.js.erb
>> looking for
>>     params[:booking_ids].each do
>>
>>>
>>>>> As I am using remote: true I created a update.js.erb and a respond_to
>>>> this query?
>>>>
>>>>>>
>>>>>>> As the edit action is not executed anymore, I dont get a proper
>>>>>> using remote: true, you can create an update.js.erb or update.js.haml
>>>>>>> Groups "Ruby on Rails: Talk" group.
>>>>>>>
>>>>>  --
>>>>> .
>>>  --
>>> .
>  --
>
>



--
Posted by Werner Laude (Guest)
on 2012-11-20 13:46
(Received via mailing list)
here...is the essential

  def edit
    @booking = Booking.new

    @project = Project.find(params[:id])
    @partprojects = Project.find_all_by_parent_id(@project.id)

    @bookings = Booking.zwischen(start, ende)

    @main_hours = main_hours_sum(@project.id)
    @part_hours = part_hours_sum(@partprojects.id)
    @all_hours =  @main_hours + @part_hours
  end

form
<%= simple_form_for @booking, :url => booking_path, :remote => true, 
:method => :put do %>
<% @bookings.each do |booking|%>

            <%= fields_for "booking[]", booking do |f|%>
             <%= f.text_field :hour, :class => 'submittable' %>
             <%= hidden_field_tag "booking_ids[]", booking.id %>
             <% end %>

 <% end %>

coffee
$(".submittable").live "change", ->
    $(this).parents("form:first").submit()



  def update
    if params[:booking_ids]
      params[:booking_ids].each do
      Booking.update(params[:booking].keys, 
params[:booking].values).reject { |p| p.errors.empty? }
      end
    end

    respond_to do |format|
      format.js{
        @project = Project.find(params[:id])
        @main_hours =  main_hours_sum(@project.id)

      }
      end
  end






Am 20.11.2012 um 13:22 schrieb Jim Ruther Nill <jvnill@gmail.com>:

>       params[:booking_ids].each do
>       end
>
>
>     @project = Project.find(params[:id])
>
> <%end%>
>   if params[:booking_ids]
>
>
> But it is unclear to me how to update the
>
> On Mon, Nov 19, 2012 at 10:25 PM, Werner <webagent...@googlemail.com> wrote:
> using remote: true, you can create an update.js.erb or update.js.haml which will 
be rendered
> To unsubscribe from this group, send email to 
rubyonrails-ta...@googlegroups.com.
> visit my blog at http://jimlabs.heroku.com
>
> To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-....
>
>
>
>

Werner Laude
webagentur.laude@gmail.com
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 13:56
(Received via mailing list)
On Tue, Nov 20, 2012 at 8:45 PM, Werner Laude <
webagentur.laude@googlemail.com> wrote:

>     @main_hours = main_hours_sum(@project.id)
>              <%= f.text_field :hour, :class => 'submittable' %>
>
>         @project = Project.find(params[:id])
>         @main_hours =  main_hours_sum(@project.id)
>
>       }
>       end
>   end
>

Ok. sorry but now I'm confused.  Where are you using @main_hours,
@part_hours and @all_hours?
I need the part of the template that uses these variables.


>
>> params[:booking].values).reject { |p| p.errors.empty? }
>>     end
>> The alert pops up and shows the correct amount of hours..
>
>>> On Tue, Nov 20, 2012 at 5:46 PM, Werner <webagent...@googlemail.**com>wrote:
>>>>   def main_hours_sum(id)
>>>> update.js.erb
>>> looking for
>>>     params[:booking_ids].each do
>>>
>>>>
>>>>>> As I am using remote: true I created a update.js.erb and a respond_to
>>>>> this query?
>>>>>
>>>>>>>
>>>>>>>> As the edit action is not executed anymore, I dont get a proper
>>>>>>> using remote: true, you can create an update.js.erb or
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> For more options, visit https://groups.google.com/**grou****
>>>>>>> visit my blog at http://jimlabs.heroku.com
>>>>>> .
>>>>> ------------------------------****------------------------------****-
>>>> 
msg/rubyonrails-talk/-/**aGQY2mvKhoUJ<https://groups.google.com/d/msg/rubyonrails-talk/-...
>>> --
>> To view this discussion on the web visit
> -------------------------------------------------------------
>
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Werner Laude (Guest)
on 2012-11-20 14:11
(Received via mailing list)
Am 20.11.2012 um 13:55 schrieb Jim Ruther Nill <jvnill@gmail.com>:

I try to explain..

I have this edit form where I can edit hours
On top of the insert form itself I give Information about the complete 
amount of hours.

So I ask for the complete amount of hours by asking for the part / main 
project and add them .

When I edit hours in the form.... I want of course not only update the 
house by form-field, but also actualize the all-together hours. (sum the 
table)

Normally this is done by the submit request parsing the edit action.
But now with editing the hour fields with js, this is not happening ...
...
Hope this gets more clear now.




>     @partprojects = Project.find_all_by_parent_id(@project.id)
> <% @bookings.each do |booking|%>
>     $(this).parents("form:first").submit()
>     respond_to do |format|
>
>>
>>     end
>>   def main_hours_sum(id)
>> May be my understanding of this process is not enough yet.
>>
>>   end
>>   end
>> the edit template.  I'd like to see how you use the @main_hours variable.  What 
I'm thinking
>>     end
>>
>> Hi!
>> Can you paste in part of the edit template where you use the result of this 
query?
>>
>> In my edit action I also have something like: Model.where(model_id: 
id).sum("attribute")
>>
>> For more options, visit https://groups.google.com/groups/opt_out.
>> You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
>> --
>>
>> To post to this group, send email to rubyonrails-talk@googlegroups.com.
>> -------------------------------------------------------------
> Werner Laude
>
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

Werner Laude
webagentur.laude@gmail.com
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 14:21
(Received via mailing list)
On Tue, Nov 20, 2012 at 9:10 PM, Werner Laude <
webagentur.laude@googlemail.com> wrote:

> project and add them .
>
> When I edit hours in the form.... I want of course not only update the
> house by form-field, but also actualize the all-together hours. (sum the
> table)
>
> Normally this is done by the submit request parsing the edit action.
> But now with editing the hour fields with js, this is not happening ...
> ...
> Hope this gets more clear now.
>

Ok. It's clearer now but you still need to show the html code above the
form where you use
@main_hours, @part_hours and @all_hours.  If you some sort of code 
before
your form like
this one

<div id='main-hours'>
  <label>Main Hours</label>
  <span><%= @main_hours %>
</div>

you can add this line in update.js.erb to update the main hours

$('#main-hours span').text('<%= @main_hours %>');

Good luck!



>> here...is the essential
>>     @part_hours = part_hours_sum(@partprojects.id)
>>              <%= hidden_field_tag "booking_ids[]", booking.id %>
>>   def update
>>         @main_hours =  main_hours_sum(@project.id)
>
>>
>>> params[:booking].values).reject { |p| p.errors.empty? }
>>>     end
>>> The alert pops up and shows the correct amount of hours..
>>
>>>> On Tue, Nov 20, 2012 at 5:46 PM, Werner <webagent...@googlemail.**com>wrote:
>>>>>   def main_hours_sum(id)
>>>>> update.js.erb
>>>> was looking for
>>>>     params[:booking_ids].each do
>>>>
>>>>>
>>>>>>>
>>>>>> Can you paste in part of the edit template where you use the result
>>>>>> level.
>>>>>>> Am Montag, 19. November 2012 15:30:42 UTC+1 schrieb jim:
>>>>>>>>> Model.where(model_id: id).sum("attribute")
>>>>>>>> $.ajax can process.  If you're
>>>>>>>>> --
>>>>>>>>> .
>>>>>>>> *****-
>>>>>>> https://groups.google.com/d/**ms**g/rubyonrails-ta...
>>>>>>
>>>>> googlegroups.com.
>>>>
>>> To unsubscribe from this group, send email to
>>
>> For more options, visit https://groups.google.com/groups/opt_out.
>> --
>
> rubyonrails-talk+unsubscribe@googlegroups.com.
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Werner Laude (Guest)
on 2012-11-20 14:32
(Received via mailing list)
Am 20.11.2012 um 14:19 schrieb Jim Ruther Nill <jvnill@gmail.com>:

> $('#main-hours span').text('<%= @main_hours %>');

perfect.. thanks a lot..
Now I get the idea..



Werner Laude
webagentur.laude@gmail.com
Posted by Jim ruther Nill (jimboker)
on 2012-11-20 14:38
(Received via mailing list)
On Tue, Nov 20, 2012 at 9:31 PM, Werner Laude <
webagentur.laude@googlemail.com> wrote:

>
> Am 20.11.2012 um 14:19 schrieb Jim Ruther Nill <jvnill@gmail.com>:
>
> $('#main-hours span').text('<%= @main_hours %>');
>
>
> perfect.. thanks a lot..
> Now I get the idea..
>
>
Cheers! At least we nail that one :)


> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Werner Laude (Guest)
on 2012-11-20 14:57
(Received via mailing list)
yes. thanks a lot..

The one more thing...

I try to complete that

    respond_to do |format|
      format.js{
        @project = Project.find(params[:id])
        @main_hours =  main_hours_sum(@project.id)
        @part_hours = part_hours_sum(@partprojects)
        @all_hours =  @main_hours + @part_hours
      }
      end

$('#main-hours span').text('<%= @main_hours %>');
$('#all-hours span').text('<%= @all_hours %>');


<div id="main-hours"><span><%= @main_hours %></span> h</div>
<div id="all-hours"><span><%= @all_hours %></span> h</div>

But then noting is working.. mhhh..



Am 20.11.2012 um 14:37 schrieb Jim Ruther Nill <jvnill@gmail.com>:

> Now I get the idea..
>
>
>
Werner Laude
webagentur.laude@gmail.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
No account? Register here.