似乎位于here的教程有一些遗漏:
在创建管理员可访问控制器方法时,他们不指定要使用哪个自定义设计控制器,或者从哪个基本控制器继承。所以我把我的代码放在了PagesController中:
class PagesController < ApplicationController
def approve_users
if current_user.admin?
if params[:approved] == "false"
@users = User.find_by_approved(false)
else
@users = User.all
end
end
end
end
只要您选择向NoMethodError in Pages@approve_users
用户显示undefined method 'each' for User
,就可以在所有用户和所有未批准用户之间切换的视图代码会生成:approved => false
:@users = User.all
。我知道为什么noMethodErrors会在app开发中出现,并且通常能够解决为什么我会收到此错误。 在<{1}}时工作,但在@users = User.find_by_approved(false)
<% if current_user.admin? %>
<h2>Users</h2>
<%= link_to "All Users", :action => "approve_users" %> | <%= link_to "Users awaiting approval", :action => "approve_users", :approved => "false" %>
<div class="ui form">
<table>
<thead>
<tr scope="col">
<th>First name</th>
<th>Last name</th>
<th>E-mail</th>
<th>Approve</th>
</tr>
</thead>
<% @users.each do |user| %>
<tbody>
<tr>
<td><%= user.firstname %></td>
<td><%= user.lastname %></td>
<td><%= user.email %></td>
<td class="ui checkbox">
<input type="checkbox" tabindex="0" class="hidden">
</td>
</tr>
</tbody>
<% end %>
</table>
</div>
<% end %>
答案 0 :(得分:0)
我专门为管理控制面板制作了一个自定义管理控制器,并将所有工具放在索引页面中。不过,你可以通过多种方式做到这一点。
对此的共识似乎是,如果将@users = User.find_by_approved(false)切换为@users = User.where(已批准:false),则效果会更好。这就是我现在所拥有的,而且效果非常好。
我也有这个问题,我最终废弃了设计并制作了自定义用户登录方法。但是,您应该能够使其工作。我按照教程here进行了操作,这非常有帮助。基本上,您要创建一个方法来批准管理控制器中的用户。这是我使用的那个:
`
def approve
User.where(id: params[:user_id]).update_all(approved: true)
redirect_to admin_index_path
end
从那里,您可以为路线添加put方法。
put 'approve_admin', to: "admin#approve", as: :approve_admin
最后,将您的用户列表包装在表单标记中,并添加要作为哈希更新的所有用户ID的哈希值。
<%= form_tag(approve_admin_path, method: :put) do %>
<% for user in @unapproved_users %>
<tr>
<td class="mdl-data-table__cell--non-numeric"><%= check_box_tag "user_id[]", user.id %></td>
<td><%= user.name %></td>
<td><%= user.email %></td>
</tr>
<% end %>
</tbody>
</table>
<%= submit_tag "Mark as approved", class: 'mdl-button mdl-js-button mdl-button--raised approve' %>
<% end %>
我创建了一个批准用户的方法和另一个用于取消批准用户的方法,因此我切换了@ users.each迭代,转而使用for迭代。我将@unapproved_users添加到我的索引方法中以使其正常工作。希望这对你有用!