将值从视图传递给帮助器

时间:2013-02-12 00:28:38

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

我有以下表格:

projects
users
projects_users <- relational table

在视图中我循环遍历所有项目,并根据用户与其拥有的关系(所有者,成员,而不是成员)将它们一个一个地展开(以及链接或不链接)

除了第3行的if语句之外,这很有效,我会检查用户是否是成员。 'check_if_member'可以在项目助手中找到(见下文)。发生的是我收到以下错误消息:

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

...(如果我做对了)意味着'@project.id'或'current_user.id'都是零。在这种情况下,我很确定它的@project.id是零,并且它实际上没有传递给帮助器。

如果我是对的,我该如何将其传递给助手? 如果我不对,问题是什么?

观点:

1.  <% @projects.each do |project| %>
2.      <div class="project_container">
3.          <% if check_if_member %>
4.              <% if project.user_id == current_user.id %>
5.                  <div class="users_project label label-success">
6.                      Owner
7.                  </div>
8.              <% else %>
9.                  <div class="not_users_project label label-info">
10.                     Member
11.                 </div>
12.             <% end %>
13.             <div class="project_name_div">
14.                 <%= link_to (project.title), project_path(project) %><br />
15.             </div>
16.         <% else %>
17.             <div class="project_name_div">
18.                 project.title <br />
19.             </div>
20.         <% end %>
21.     </div>
22. <% end %>

帮助者:

module ProjectsHelper
    def check_if_member
        if ProjectsUser.where("project_id = ? AND user_id = ?", @project.id, current_user.id)
            return true
        else
            return false
        end
    end
end

1 个答案:

答案 0 :(得分:2)

明确传递

def check_if_member project, user
    ProjectsUser.where("project_id = ? AND user_id = ?", project.id, user.id).count > 0
end

然后

<% if check_if_member(project, current_user) %>