Quick answer needed on dependancy


#1

Hi Guys,

I have a mail_templates table
I have a mailinglists table
I have a mail_templates_mailinglists table with mailtemplate_id, and
mailinglist_id

mail_template has_and_belongs_to_many :mailinglists
mailinglist has_and_belongs_to_many :mail_templates, :foreign_key =>
“mailinglist_id”

I want to be able to stop the user being able to destroy the
mail_template if it is being used by a mailinglist.

So in my destroy method in my mail_template controller I want to find
any mailinglists that have a mail_template id.

I tried the following but I am getting an error,

mailinglist = Mailinglist.mail_template_mailinglists.find(:all, :conditions => ["mail_template_id = ?", params[:id]])
if mailinglist.empty?
  MailTemplate.find(params[:id]).destroy
else
  flash[:notice] = 'Cannot delete mail template, as it is being used

by one or more mailinglist.’
end

NoMethodError in Admin/mail templatesController#destroy

undefined method `mail_template_mailinglists’ for #Class:0x3333814


#2

Dave S. wrote:

mailinglist = Mailinglist.mail_template_mailinglists.find(:all, :conditions => ["mail_template_id = ?", params[:id]])
if mailinglist.empty?
  MailTemplate.find(params[:id]).destroy
else
  flash[:notice] = 'Cannot delete mail template, as it is being used

by one or more mailinglist.’
end

NoMethodError in Admin/mail templatesController#destroy

undefined method `mail_template_mailinglists’ for #Class:0x3333814

any ideas anyone?


#3

On Mon, Jan 19, 2009 at 1:01 PM, Dave S. <
removed_email_address@domain.invalid> wrote:

“mailinglist_id”
mailinglist = Mailinglist.mail_template_mailinglists.find(:all,

NoMethodError in Admin/mail templatesController#destroy

undefined method `mail_template_mailinglists’ for #Class:0x3333814

You’re trying to invoke a class method ‘mail_template_mailinglists’,
which
isn’t how habtm works. What you want is to retrieve the MailTemplate
object, and ask it whether it has any mailinglists.

Try this (not tested, but should give you how it works):

mail_template = MailTemplate.find(params[:id]) # grab the MailTemplate we're looking to destroy

if mail_template.mailinglists.empty? # see whether it has any
mailinglists
using it
mail_template.destroy
else
flash[:notice] = “Cannot delete mail template, as it is being used by
one
or more mailinglists.”
end

HTH!