我有一个由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 %>
在我的路线中我有资源:新人
所以,我不知道如何使按钮按照应有的方式工作。这意味着它应该只更新属性&#34;已批准&#34;并将其设置为true。并返回同一页面(索引)
答案 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
让我知道它是否无效...