【问题标题】:Rails method affects every user in databaseRails 方法影响数据库中的每个用户
【发布时间】:2013-06-09 19:52:31
【问题描述】:

这是我的第一个 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 %> 

谢谢!!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多