Rails方法影响数据库中的每个用户

时间:2013-06-09 19:52:32

标签: ruby-on-rails

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

我发现如何使用@post和remote:=>搜索堆栈溢出时为true。

但是,似乎单击make 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 %> 

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

会在那里拨打user.toggle!(:admin),它不会像您认为的那样附加user.toggle!次点击。 :method应该指示应该使用哪种HTTP方法(GET,POST,DELETE,...),而不是单击该链接应该做什么。

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