如何从 rails 中的索引更新记录
How to update a record from index in rails
我试图从用户索引的视图更新用户记录(仅 "closed" 命名列)。这就是我尝试过的。但是,它不起作用。我使用 Devise gem 来生成视图和控制器。但是,无论如何,我如何才能直接从索引更新记录的一个特定值(无需编辑视图)。如果有人能帮助我,那将是非常有帮助的。
<% @users.each do |user| %>
<tr>
<td> <%= user.last_name %></td>
<td> <%= user.telephone %></td>
<td> <%= form_for user do |f| %>
<% if user.closed %>
<%= f.hidden_field :closed, value: false %>
<%= f.submit "Activate" %>
<% else %>
<%= f.hidden_field :closed, value: true %>
<%= f.submit "Deactivate" %>
<% end %>
<% end %> </td>
<%= link_to 'Remove', user_destroy_path(user), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
控制器:
def user_index
if current_user.admin?
if params[:user_search].present?
@users = User.search_user(params[:user_search]).super_admin
else
@users = User.super_admin
end
else
if params[:user_search].present?
@users = User.search_user(params[:user_search]).admin
else
@users = User.admin
end
end
respond_to do |format|
format.html
format.csv { send_data User.to_csv, type: 'text/csv', filename: "users.csv" }
end
end
这是我的控制器。其实还有一些搜索用户
在您的控制器中,创建两个方法 activate
和 deactivate
。
在控制器中,
def activate
@user = User.find_by(:id=>params[:id])
@user.update(:closed=>false)
redirect_to #your path
end
def deactivate
@user = User.find_by(:id=>params[:id])
@user.update(:closed=>true)
redirect_to #your path
end
将您的路线设置为,
patch '#yourcontroller/:id/activate',to:'#yourcontroller#activate' , as: :activate
patch '#yourcontroller/:id/deactivate',to:'#yourcontroller#deactivate' ,as: :deactivate
最后改变你的观点,
<% @users.each do |user| %>
<tr>
<td> <%= user.last_name %></td>
<td> <%= user.telephone %></td>
<td> <%if user.closed?%>
<%= link_to 'activate',activate_path(id:user.id), method: :patch%>
<%else%>
<%= link_to 'deactivate',deactivate_path(id:user.id), method: :patch%>
<% end -%> </td>
<%= link_to 'Remove', user_destroy_path(user), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
有帮助请点赞!
我试图从用户索引的视图更新用户记录(仅 "closed" 命名列)。这就是我尝试过的。但是,它不起作用。我使用 Devise gem 来生成视图和控制器。但是,无论如何,我如何才能直接从索引更新记录的一个特定值(无需编辑视图)。如果有人能帮助我,那将是非常有帮助的。
<% @users.each do |user| %>
<tr>
<td> <%= user.last_name %></td>
<td> <%= user.telephone %></td>
<td> <%= form_for user do |f| %>
<% if user.closed %>
<%= f.hidden_field :closed, value: false %>
<%= f.submit "Activate" %>
<% else %>
<%= f.hidden_field :closed, value: true %>
<%= f.submit "Deactivate" %>
<% end %>
<% end %> </td>
<%= link_to 'Remove', user_destroy_path(user), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
控制器:
def user_index
if current_user.admin?
if params[:user_search].present?
@users = User.search_user(params[:user_search]).super_admin
else
@users = User.super_admin
end
else
if params[:user_search].present?
@users = User.search_user(params[:user_search]).admin
else
@users = User.admin
end
end
respond_to do |format|
format.html
format.csv { send_data User.to_csv, type: 'text/csv', filename: "users.csv" }
end
end
这是我的控制器。其实还有一些搜索用户
在您的控制器中,创建两个方法 activate
和 deactivate
。
在控制器中,
def activate
@user = User.find_by(:id=>params[:id])
@user.update(:closed=>false)
redirect_to #your path
end
def deactivate
@user = User.find_by(:id=>params[:id])
@user.update(:closed=>true)
redirect_to #your path
end
将您的路线设置为,
patch '#yourcontroller/:id/activate',to:'#yourcontroller#activate' , as: :activate
patch '#yourcontroller/:id/deactivate',to:'#yourcontroller#deactivate' ,as: :deactivate
最后改变你的观点,
<% @users.each do |user| %>
<tr>
<td> <%= user.last_name %></td>
<td> <%= user.telephone %></td>
<td> <%if user.closed?%>
<%= link_to 'activate',activate_path(id:user.id), method: :patch%>
<%else%>
<%= link_to 'deactivate',deactivate_path(id:user.id), method: :patch%>
<% end -%> </td>
<%= link_to 'Remove', user_destroy_path(user), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
有帮助请点赞!