Как обновить запись из индекса в рельсах - PullRequest
0 голосов
/ 15 января 2019

Я пытался обновить запись пользователя (только «закрытый» именованный столбец) из представления индекса пользователя. Это то, что я пытался. Но это не работает. Я использовал 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

вот мой контроллер. На самом деле также есть что-то, что делается для поиска пользователей

1 Ответ

0 голосов
/ 15 января 2019

В вашем контроллере создайте два метода 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 %>

Это полезно, пожалуйста, проголосуйте!

...