如何从视图中调用模型中定义的方法?

时间:2012-03-16 09:23:54

标签: ruby-on-rails ruby-on-rails-3

我在以下代码中遇到未定义的方法`member'错误

请在下面的代码中告诉我哪里出错...


我有组模型,其中我创建了成员方法如下

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

在我的groups_controller索引操作中:

def index
  @group = Group.all
end

并在我的groups / index.html.haml内部我在下一行调用此方法

- @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"    

但是当我运行代码时,我得到未定义的方法`member'错误

1 个答案:

答案 0 :(得分:1)

memberGroup的实例方法。所以你应该将那一行改为

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

但它不需要是实例方法。它不使用任何州或任何东西。所以,把它变成一个类方法。

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

并称之为:

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