0

这是我的第一个 Rails 项目。我正在尝试编写一个表单,当登录用户是管理员时,该表单允许我为任何用户切换“管理员”字段。

在搜索堆栈溢出时,我发现了如何使用 @post 和 remote: => true 来做到这一点。

但是,似乎单击 make admin 链接会将每个用户更改为管理员,并且 remove admin 链接会从管理员列表中删除每个人。不知道为什么这样做。这是代码:

<% @users.each do |user| %>
        <li>
            <%= gravatar_for user, size: 35 %>
            <%= link_to user.name, user %> 
            <% if current_user.admin? && !current_user?(user) %>
                | <%= link_to "delete", user, method: :delete,
                    data: { confirm: "You sure?" } %>
                <% if user.admin? %>
                | <%= link_to "remove admin rights", @post, :method => user.toggle!(:admin), :remote => true, 
                    data: { confirm: "You sure?"}%>
                <% else %>
                | <%= link_to "make admin", @post, :method => user.toggle!(:admin), :remote => true,
                    data: { confirm: "You sure?"}%>
                <% end %>

            <% end %>
        </li>
        <% end %> 

谢谢!!

4

1 回答 1

1

当您单击任何内容时不会更改用户,当您显示视图时会更改用户。这个:

:method => user.toggle!(:admin)

user.toggle!(:admin)在那里调用,它不会user.toggle!像您认为的那样将调用附加到点击。:method应该指示应该使用哪种 HTTP 方法(GET、POST、DELETE...),而不是单击链接应该执行的操作。

您需要创建一个将调用的控制器方法和路由,user.toggle!然后将一个添加link_to到该控制器。

于 2013-06-09T20:18:02.567 回答