如何使用 rails gem 'best_in_place' 编辑点击按钮的数据?

How to edit data onclick button using rails gem 'best_in_place'?

我正在使用 rails gem 'best_in_place' 和数据逐一编辑,如单击特定字段。 如何激活可编辑的 onclick update/edit 按钮的所有字段?

def update
    if m_user[:name].present?
        MUser.where(:id => id).update(:name => m_user[:name])                        
    elsif m_user[:gender].present?
        MUser.where(:id => id).update(:gender => m_user[:gender])                      
    else
        flash[:danger] = 'not updated'
    end        
end

查看代码:

<% @user.each do |record| %>    
 <tr>
   <td>
    <%= best_in_place record, :name, :as => :input %> 
   </td>
   <td>
     <%= best_in_place record, :gender, :as => :select, collection: (MUser.pluck(:id,:gender)) %>
   </td>
     <%= best_in_place record, :dob, :as => :date, class: 'datepicker1 %>
   </td>
 </tr>
<% end %>
<%= submit_tag('update',:name => 'update_data', class: 'btn btn-primary btn-sm', :id => 'update_btn') %>

现在数据编辑就像我编辑一样name它会自动编辑 ,但是当我单击 update/edit 按钮然后激活所有字段以进行编辑时,我该如何编辑。

正如我们所讨论的,您需要进行一些更改

  1. 添加 _user.html.erb 部分以使用以下代码呈现记录。

    <td>
      <%= user.name %> 
    </td>
    <td>
      <%= user.gender %>
    </td>
    <td>
      <%= user.dob %>
    </td>
    <td>
      <%= link_to "Edit", edit_user_path(user), remote: true %>
    <td>
    
  2. 现在更改您的 index.html.erb 代码,如下所示。

    <% @users.each do |user| %>
      <tr id="record-row-<%= user.id %>">
        <%= render prtial: 'user', locals: { user: user } %>
      </tr>
    <% end %>
    

    现在刷新您的页面,您将在 table 行中看到用户记录。

  3. 添加新的部分 _user_form.html.erb 以呈现表单并在其中添加以下代码。

    <td colspan="4">
      <%= form_for(@user, remote: true) do |f|
        <table>
          <tbody>
            <tr>
              <td><%= f.text_field :name, class: 'form-control' %></td>
              <td><%= f.select :gender, MUser.pluck(:gender, :id).uniq, { selected: @user.gender }, class: 'form-control' %></td>
              <td><%= f.text_field :name, class: 'form-control datepicker1' %></td>
              <td><%= f.submit "Update" %></td>
            </tr>
          </tbody>
        </table>
      <% end %>
    </td>
    
  4. 现在需要更新 editupdate 操作。

    编辑 操作

    def edit
      @user = User.find(params[:id])
      respond_to do |format|
        format.js { }
        format.html { render 'edit' }
      end
    end
    

    更新 操作

    def update
      @user = User.find(params[:id])
      respond_to do |format|
        if @user.update_attributes(user_params)
          format.js { }
          format.html { redirect_to @user, notice: 'User was updated successfully.' }
        else
          format.js { }
          format.html { render 'edit' }
        end
      end
    end
    
    private
    
    def user_params
      params.require(:user).permit(:name, :gender, :dob)
    end
    
  5. 现在您需要创建一个 edit.js.erb 文件以在选定的行上呈现表单。

    $("#record-row-<%= @user.id %>").html("<%= escape_javascript(render 'user_form') %>")
    
  6. 而且你还需要一个update.js.erb文件来更新用户记录后的table行

     $("#record-row-<%= @user.id %>").html("<%= escape_javascript(render partial: 'user', locals: { user: @user } ) %>")
    

一切就绪。刷新您的页面并单击一行的编辑按钮。将出现一个表格。更改值并单击“更新”按钮。您将看到更新后的记录。

如果您有任何问题,请告诉我。乐于助人。