0

私は次のテーブルを持っています:

projects
users
projects_users <- relational table

ビューでは、すべてのプロジェクトをループして、ユーザーとの関係(所有者、メンバー、メンバーではない)に応じて、異なるクラス(およびリンクされているかどうか)でプロジェクトを1つずつレンダリングしています。

これは、ユーザーがメンバーであるかどうかを確認する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」のいずれかがnilであることを意味します。この場合、nilであるのは@ 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
4

1 に答える 1

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) %>
于 2013-02-12T00:30:39.847 に答える