如何设置"已批准"使用Rails中的按钮将用户属性设置为true

时间:2017-04-12 08:17:42

标签: ruby-on-rails

我有一个由Devise建立的用户模型,它有一个布尔属性"已批准"默认值设置为false。

我创建了一个名为" newcomers"在哪里设置index操作以显示所有未获批准的用户,并设置update操作以设置"已批准"真的

class NewcomersController < ApplicationController

    def index
        @users = User.where("approved = ?", false)
    end

    def update
        @user = User.find(params[:id])
        @user.update_attribute :approved, true
        respond_to do |format|
            format.html { redirect_to newcomers_path, notice: 'Member was successfully approved!' }
        end
    end
end 

所以,在我看来,我做了

<h1>Members Requests</h1>

<% @users.each do |user| %> 
<%= user.email %>

<%= form_for user, url: newcomers_path, method: :patch do |f| %>
  <%= f.submit "Approve" %>
<% end %>
<% end %>

在我的路线中我有资源:新人

enter image description here

所以,我不知道如何使按钮按照应有的方式工作。这意味着它应该只更新属性&#34;已批准&#34;并将其设置为true。并返回同一页面(索引)

3 个答案:

答案 0 :(得分:1)

只需在视图中使用link_to指向控制器中的更新操作:

<%= link_to 'Approve', newcomer_path(user_id), method: :put %>

在您的控制器中,只需更新具有给定ID的用户重定向到索引路径。

如果您希望它更加花哨,可以向remote: true添加link_to并使用js进行回复,仅从视图中删除受影响的行。

答案 1 :(得分:1)

尝试以下代码

<h1>Members Requests</h1>

<% @users.each do |user| %> 
  <%= user.email %>
  <% if user.approved %>
    <%= link_to 'Unapprove', newcomer_path(user, approve: false), method: :put %>
  <% else %>
    <%= link_to 'Approve', newcomer_path(user, approve: true ), method: :put %>
  <% end %>

控制器

def update
    @user = User.find(params[:id])
    @user.update_attribute :approved, params[:approve]
    respond_to do |format|
        format.html { redirect_to newcomers_path, notice: 'Member was successfully approved!' }
    end
end

答案 2 :(得分:1)

进行以下更改

在视图中

<%= form_for user, url: newcomer_path(user, approved: true), method: :patch do |f| %>
  <%= f.submit "Approve" %>
<% end %>

并在控制器中

def update
    if params[:user].nil?
      @user = User.find(params[:id])
      @user.update_attribute :approved, true
      respond_to do |format|
         format.html { redirect_to newcomers_path, notice: 'Member was successfully approved!' }
      end
    end
end

让我知道它是否无效...