NJF
NJF

Reputation: 435

how to call method defined in model from view?

I am getting undefined method `member' error in my following code

Pls tell where am i going wrong in the following code...


I have groups model in which i have created member method as follows

def member(groupid,userid)
  @members = Membership.all
  @members.each do |m|
    if m.group_id == groupid and m.user_id == userid
      return true
    end
  end
end

in my groups_controller index action :

def index
  @group = Group.all
end

and inside my groups/index.html.haml i am calling this method at following line

- @group.reverse.each do |group|
            %tr
            %ul{:style=>"list-style-type:square"}
              %td
              %li= link_to group.groupname,group
              - if member(@group.id,@current_user.id)
                = link_to ' Join this group', {:controller => "memberships", 
                       :action => "create", 
                       :group_id => group.id},
                       :method => "post"    

but when i run code i get undefined method `member' error

Upvotes: 0

Views: 2329

Answers (1)

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230336

member is an instance method of Group. So you should change that line to

- if group.member(@group.id, @current_user.id)

But it doesn't need to be instance method. It doesn't use any state or anything. So, make it a class method.

class Group
  def self.member(groupid,userid)
    @members = Membership.all
    @members.each do |m|
      if m.group_id == groupid and m.user_id == userid
        return true
      end
    end
  end
end

And call it like this:

- if Group.member(@group.id, @current_user.id)

Upvotes: 1

Related Questions