Hi,
I''ve been working on a simple but useful application that uses
draggable
Ajax tags to associate photos with people. I have the tags working and the
photo list working, but I cannot seem make add the tagging association in
the database.
The relevant code is posted below. My guess is that it has something to do
with the PhotosController, although I don''t know
anymore...I''ve tried every
combination of code I could think of. I really don''t want to give up
on
this project, so I would be so grateful for your help!
Thanks,
Michael
## this might take a big rewrite, since I''ve had 2000 versions of it
PhotosController ...
def addtag
@person_id = params[:id].split("_")[1]
@photo_id = params[:photo]
@photo = Photo.find(@photo_id)
@photo.people = @person_id
if @photo.update_attributes()
flash[:notice] = ''Success!!''
redirect_to :action => ''show'', :id => photo
end
end
...
tagging.rhtml (views) ## page where the tagging is done ...
<% for photo in @photos %>
<div id="<%= "photo_#{photo.id}" %>"
style="float:left; padding: 0 5
5 0;">
<%= link_to(image_tag("photos/#{photo.thumbnail}",
:size => ''200'',
:border => 0,
:id => ''thumbnail''),
url_for(:action => ''show'', :id => photo)
)
%>
<div id="indicator"
style="display:none;margin-top:0px;">
<%= image_tag "indicator.gif" %> Updating...
</div>
<%= drop_receiving_element("photo_#{photo.id}",
:url => {:controller => "photos", :action =>
"addtag"},
:photo => "#{photo.id}", ## added this because
I''m not sure
the Controller knows both ids of dropped tag and photo being tagged
:loading =>
"Element.show(''indicator'')",
:complete =>
"Element.hide(''indicator'')")
%>
</div>
<% end %>
...
class Person < ActiveRecord::Base
has_and_belongs_to_many :photos
End
class Photo < ActiveRecord::Base
validates_presence_of :filename
has_and_belongs_to_many :people
End
This is what my database looks like:
Table "photos"
"filename", :string
"description", :text
"thumbnail", :string
"date_taken", :date
Table "people_photos"
"person_id", :integer
"person_id", :integer
Table "people"
"firstname", :string
"lastname", :string
"email", :string
"school", :string
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Table "people_photos" "person_id", :integer "person_id", :integer should be person_id photo_id if this was only a typo you should add the error stack trace. Cheers, Jan --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
@photo.people = @person_id
if @photo.update_attributes()
These two lines should be:
@photo.people << Person.find(@person_id)
if @photo.save
unless I''m misunderstanding your original code...
Jeff
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Thanks! It works! The ''<<'' was the breakthrough. I
also needed to
pass-back the id of the photo where the tag was dropped; this was done
using :where. Here''s the updated relevant working code.
The only line that doesn''t work is @photo.save, which doesn''t
then
flash "Success!!". When I added an else statement, it also
didn''t
evaluate. Not sure what''s going on there...
Thanks again!
## tagging.rhtml
...
<div id="indicator"
style="display:none;margin-top:0px;">
<%= image_tag "indicator.gif" %> Updating...
</div>
<%= drop_receiving_element("photo_#{photo.id}",
:url => {:controller => "photos", :action =>
"addtag",
:where => "#{photo.id}"},
:loading =>
"Element.show(''indicator'')",
:complete =>
"Element.hide(''indicator'')")
%>
## PhotosController
...
def addtag
@person_id = params[:id].split("_")[1]
@photo_id = params[:where]
@photo = Photo.find(@photo_id)
@photo.people << Person.find(@person_id)
if @photo.save
flash[:notice] = ''Success!!''
redirect_to :action => ''taggable''
end
end
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
MichaelM wrote:> The only line that doesn''t work is @photo.save, which doesn''t then > flash "Success!!". When I added an else statement, it also didn''t > evaluate. Not sure what''s going on there... > > Thanks again! >Hmmm.... Does the redirect to the ''taggable'' action work? If so, it''s probably just a bug in how you''re trying to display the flash notice. Can you post taggable.rhtml? If the redirect is not working either, then something else is going on, like an exception is being raised somewhere that''s causing the entire method to abort. Try enclosing the whole method body in a begin/rescue/end structure, and write something to log each step of the way, until you can see what''s going on. Jeff softiesonrails.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Below is my ''taging.rhtml''. I''m actually not quite
sure how to do
begin-rescue-end you suggested. I''ve been struggling with this for so
long, I started another post.
http://groups.google.com/group/rubyonrails-talk/browse_frm/thread/7193bcc39ac82a01/044cae6079b7b382?lnk=raot#044cae6079b7b382
No luck yet, but I''ll be sure to post the solutions once I figure it
out (that is, IF I figure it out!)
# tagging.rhtml
<h1>Tagging photos</h1>
<!-- Placeholder for @PHOTOS_ACROSS funcationality -->
<% @PHOTOS_ACROSS = 2 %>
<div id="listBox" style="width:150px;">
<% for person in @all_people %>
<span id="<%= "person_#{person.id}" %>"
class="nameSpan"
style="border:1px solid #ffffee;display:block"><%=
person.firstname + "
" + person.lastname %></span>
<%= draggable_element ("person_#{person.id}", :revert =>
true)
%>
<% end %>
</div>
<p>
<div id="indicator"
style="display:none;margin-top:0px;">
<%= image_tag "indicator.gif" %> Updating...
</div>
</p>
<div>
<% for photo in @photos %>
<div id="<%= "photo_#{photo.id}" %>"
style="float:left;padding:
0 5 5 0; border:thin solid #000">
<%= link_to(image_tag("photos/#{photo.thumbnail}",
:size => ''200'',
:border => 0,
:id => ''thumbnail''),
url_for(:action => ''show'', :id => photo)
)
%>
<%= drop_receiving_element("photo_#{photo.id}",
:url => {:controller => "photos", :action =>
"addtag",
:where => "#{photo.id}"},
:loading =>
"Element.show(''indicator'')",
:complete =>
"Element.hide(''indicator'')")
%>
<div id="listing">
<%= render :partial => "taglist", :locals =>
{
:photo_tags => photo.people.find(:all) } %>
</div>
</div>
<% end %>
<%= link_to ''Previous page'', { :page =>
@photo_pages.current.previous } if @photo_pages.current.previous %>
<%= link_to ''Next page'', { :page =>
@photo_pages.current.next } if
@photo_pages.current.next %>
</div>
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
MichaelM wrote:> Below is my ''taging.rhtml''. I''m actually not quite sure how to do > begin-rescue-end you suggested. I''ve been struggling with this for so > long, I started another post. > > http://groups.google.com/group/rubyonrails-talk/browse_frm/thread/7193bcc39ac82a01/044cae6079b7b382?lnk=raot#044cae6079b7b382 >I''ll address the flash issue here, and the other issue in the other thread... Unless I''m missing it, I don''t see anywhere in your tagging.html that actually displays the flash notice. <% if flash[:notice] %> <h3><% flash[:notice] %></h3> <% end %> Obviously the <h3> is just an example, you can also use a div and style it with css. Jeff softiesonrails.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I posted that exact code in tagging.rhtml, but it again doesn''t display. It continues to display ''Success!'' if I click to another page. Do I need an if statment do display flash[:notice]? None of my other (working) pages have it. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jeff Cohen wrote:> <% if flash[:notice] %> > <h3><% flash[:notice] %></h3> > <% end %>I think that should be <%= flash[:notice] %> , no ? (equals sign) -- Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Alan Francis wrote:> Jeff Cohen wrote: > >> <% if flash[:notice] %> >> <h3><% flash[:notice] %></h3> >> <% end %> > > I think that should be <%= flash[:notice] %> , no ? (equals sign)Also, I assume the flash display code is already present in the layout file. Two suggestions: 1) regardless of any conditions or saving, set the flash to something crazy at the end of the action, just to make sure it can change. 2) If that proves successful (ie changing the flash, changes the display) try using save! instead of save and see if you get an exception thrown. Alan -- Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---