I have Acts_As_Taggable Plugin working. I have a HR controller and a sales controller. I have a document in hr tagged whitepaper and a differnent document in sales tagged whitepaper when I am in hr I see the hr document tagged with whitepaper and not the sale document (what I want). but if I click on the tag whitepaper I return two documents, hr and sales. I just want to return the hr document because the sales document is for sales people only. I''m guessing I need to filter it somewhere but haven''t found the place yet. taggings db create_table :taggings do |t| t.column :tag_id, :integer #id of tagged object t.column :taggable_id, :integer #type of object tagged t.column :taggable_type, :string end thanks in advance john
Hi, On Fri, 2006-14-07 at 09:44 -0500, John Ivanoff wrote:> I have Acts_As_Taggable Plugin working. I have a HR controller and a > sales controller. > I have a document in hr tagged whitepaper and a differnent document in > sales tagged whitepaper > when I am in hr I see the hr document tagged with whitepaper and not > the sale document (what I want). but if I click on the tag whitepaper > I return two documents, hr and sales. I just want to return the hr > document because the sales document is for sales people only. > > I''m guessing I need to filter it somewhere but haven''t found the place yet.I needed to do something similar. I used the "with_scope" method to do the following (using your example). In my controller where I have the method doing the find_tagged_with, I do this: Document.with_scope( :find => { :conditions => ["dept_id = ?", department] }) do @docs = Document.find_tagged_with(....) end Any find_* that happen within the "with_scope" block will be constrained with the conditions specified. Rick
this is what happens when a newbie tries things he doesn''t fully understand, and I thought not touching a computer over the weekend would clear my head. it didn''t in the line { :conditions => ["dept_id = ?", department] }) do i would either have HR of SALES? If so me select doesn''t work. I get this error. Mysql::Error: Unknown column ''dept_id'' in ''where clause'': SELECT * FROM tags WHERE (dept_id = ''hr'') AND (tags.`name` = ''jim'' ) LIMIT 1 For some reason I''m thinking I need to filter on the taggalbe_type column in the taggings table. but if I try that a get and error also. unrecinizable table... Thanks john. On 7/14/06, Rick Tessner <rick.tessner@gmail.com> wrote:> Hi, > > On Fri, 2006-14-07 at 09:44 -0500, John Ivanoff wrote: > > I have Acts_As_Taggable Plugin working. I have a HR controller and a > > sales controller. > > I have a document in hr tagged whitepaper and a differnent document in > > sales tagged whitepaper > > when I am in hr I see the hr document tagged with whitepaper and not > > the sale document (what I want). but if I click on the tag whitepaper > > I return two documents, hr and sales. I just want to return the hr > > document because the sales document is for sales people only. > > > > I''m guessing I need to filter it somewhere but haven''t found the place yet. > > I needed to do something similar. I used the "with_scope" method to do > the following (using your example). In my controller where I have the > method doing the find_tagged_with, I do this: > > Document.with_scope( :find => > { :conditions => ["dept_id = ?", department] }) do > @docs = Document.find_tagged_with(....) > end > > Any find_* that happen within the "with_scope" block will be constrained > with the conditions specified. > > Rick > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Hi, On Mon, 2006-17-07 at 09:04 -0500, John Ivanoff wrote:> this is what happens when a newbie tries things he doesn''t fully > understand, and I thought not touching a computer over the weekend > would clear my head. it didn''t:)> in the line > { :conditions => ["dept_id = ?", department] }) do > i would either have HR of SALES? > If so me select doesn''t work. I get this error. > > Mysql::Error: Unknown column ''dept_id'' in ''where clause'': SELECT * > FROM tags WHERE (dept_id = ''hr'') AND (tags.`name` = ''jim'' ) LIMIT 1Sorry, I''d made some assumptions about the structure of your database. I''d assumed that there was a Document and Dept model and that there was a has_many relationship between Dept and Document. (ie. Dept has_many Document and Document belongs_to Dept). That''s reflected in the above ":conditions" line. That''s where the "dept_id" column would come from.> For some reason I''m thinking I need to filter on the taggalbe_type > column in the taggings table. but if I try that a get and error also. > unrecinizable table...You may be able to do something like this (although it doesn''t quite feel right to me for some reason ... maybe it''s just that there''s too much knowledge about the implementation of tagging ... not sure). I haven''t tried this, so I don''t know if it will work. Taggings.with_scope( :find => { :conditions => ["taggable_type = ''HR''"] }) do @docs = Document.find_tagged_with(...) end Rick
Hi again, On Mon, 2006-17-07 at 08:44 -0700, Rick Tessner wrote:> You may be able to do something like this (although it doesn''t quite > feel right to me for some reason ... maybe it''s just that there''s too > much knowledge about the implementation of tagging ... not sure). I > haven''t tried this, so I don''t know if it will work. > > Taggings.with_scope( :find => > { :conditions => ["taggable_type = ''HR''"] }) do > > @docs = Document.find_tagged_with(...) > endLooks like the above doesn''t work. And, in fact, the original method that I''d posted doesn''t work either. (I thought it was ... I have bad test case) It appears that the "with_scope" method on a model is not honoured by the find_by_sql method, which is what the find_tagged_with method makes use of. I''d guess that find_by_sql is not meant to honour anything defined by "with_scope" since find_by_sql is the method used to just run good ''ol SQL . So, I''d guess that you''d have to write your own find_tagged_with_and_scoped_by method. Rick
answer... i origianlly had this in the controller... @hrfiles = if tag_name = params[:id] #Tag.find_by_name(tag_name).tagged else hrfile.find(:all) end This works @hrfiles = if tag_name = params[:id] hrfile.find_tagged_with(tag_name) else hrfile.find(:all) end On 7/17/06, Rick Tessner <rick.tessner@gmail.com> wrote:> Hi again, > > On Mon, 2006-17-07 at 08:44 -0700, Rick Tessner wrote: > > > You may be able to do something like this (although it doesn''t quite > > feel right to me for some reason ... maybe it''s just that there''s too > > much knowledge about the implementation of tagging ... not sure). I > > haven''t tried this, so I don''t know if it will work. > > > > Taggings.with_scope( :find => > > { :conditions => ["taggable_type = ''HR''"] }) do > > > > @docs = Document.find_tagged_with(...) > > end > > Looks like the above doesn''t work. And, in fact, the original method > that I''d posted doesn''t work either. (I thought it was ... I have bad > test case) > > It appears that the "with_scope" method on a model is not honoured by > the find_by_sql method, which is what the find_tagged_with method makes > use of. > > I''d guess that find_by_sql is not meant to honour anything defined by > "with_scope" since find_by_sql is the method used to just run good ''ol > SQL . > > So, I''d guess that you''d have to write your own > find_tagged_with_and_scoped_by method. > > Rick > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >