Forum: Ruby on Rails quick answer needed on dependancy

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.
428f1d76da99d9602d57b046841df29a?d=identicon&s=25 Dave Smith (railsnoob)
on 2009-01-19 20:01
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,

<code>
  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
</code>


 NoMethodError in Admin/mail templatesController#destroy

undefined method `mail_template_mailinglists' for #<Class:0x3333814>
428f1d76da99d9602d57b046841df29a?d=identicon&s=25 Dave Smith (railsnoob)
on 2009-01-19 21:03
Dave Smith wrote:

> <code>
>   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
> </code>
>
>
>  NoMethodError in Admin/mail templatesController#destroy
>
> undefined method `mail_template_mailinglists' for #<Class:0x3333814>

any ideas anyone?
3be29bee1806b097fc68621eb45f2e37?d=identicon&s=25 Ryan Waldron (rew)
on 2009-01-19 21:40
(Received via mailing list)
On Mon, Jan 19, 2009 at 1:01 PM, Dave Smith <
rails-mailing-list@andreas-s.net> 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):

<code>
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
</code>

HTH!
This topic is locked and can not be replied to.