更新用户集合

时间:2016-01-20 12:12:22

标签: ruby-on-rails arrays ruby crud

在我的应用中,我需要通过一个提交按钮同时更新一组用户。但是,每当我按提交时,在我的控制台中,我都会收到错误,

Unpermitted parameters: 1, 3, 4, 2 Unpermitted parameters: 1, 3, 4, 2 Unpermitted parameters: 1, 3, 4, 2 Unpermitted parameters: 1, 3, 4, 2 Unpermitted parameters: 1, 3, 4, 2

Update_collection如下所示:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"GWT/QI3w/uqcsTAy58iPRfb4UqVNn5+cExQuKx72uJ9W3t0CrkkkOvDc4ZvVS7Uh88JtQ7awenoERT/qww37eQ==", "user"=>{"1"=>{"username"=>"Bob", "sunday"=>"8", "monday"=>"7", "tuesday"=>"09", "wednesday"=>"986", "thursday"=>"765", "friday"=>"321", "saturday"=>"432"}, "3"=>{"username"=>"Mike", "sunday"=>"76", "monday"=>"098", "tuesday"=>"40", "wednesday"=>"243", "thursday"=>"986", "friday"=>"7536", "saturday"=>"07"}, "4"=>{"username"=>"George", "sunday"=>"", "monday"=>"", "tuesday"=>"", "wednesday"=>"", "thursday"=>"", "friday"=>"", "saturday"=>""}, "2"=>{"username"=>"Admin", "sunday"=>"", "monday"=>"", "tuesday"=>"", "wednesday"=>"", "thursday"=>"", "friday"=>"", "saturday"=>""}}, "commit"=>"Submit"}

我认为它所说的地方,"user"=>{"1"=>{etc...}}是我的问题所在,但考虑到这些是动态哈希,我不知道如何允许它们,即使在允许它们之后,我也不会希望它们更新,因为它们不属于单个用户模型,只是阵列本身。

users_controller.rb

class UsersController < ApplicationController
#  before_filter :authenticate_user! 
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = User.new
  end

  def update_collection
    @users = User.all
    @users.each do |user|
      if collect_params[:password].blank?
        collect_params.delete(:password)
        collect_params.delete(:password_confirmation)
      end

      successfully_updated = if needs_password?(user, collect_params)
                             user.update(collect_params)
                           else
                             user.update_without_password(collect_params)
                           end

      #respond_to do |format|
        #if user.update(collect_params)
          #format.html { redirect_to user, notice: 'User was successfully updated.' }
          #format.json { render :show, status: :ok, location: user }
       # else
          #format.html { render :edit }
         # format.json { render json: user.errors, status: :unprocessable_entity }
        #end
      #end
    end
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1
  # PATCH/PUT /users/1.json
  def update
    if user_params[:password].blank?
      user_params.delete(:password)
      user_params.delete(:password_confirmation)
    end

    successfully_updated = if needs_password?(@user, user_params)
                           @user.update(user_params)
                         else
                           @user.update_without_password(user_params)
                         end
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { render :show, status: :ok, location: @user }
      else
        format.html { render :edit }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  protected

    def needs_password?(user, params)
      params[:password].present?
    end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    def collect_params
      params.require(:user).permit(:role_id, :username, :password, :password_confirmation, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday)
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:role_id, :username, :password, :password_confirmation, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday)
    end



end

我的表单代码:

<%= form_tag update_collection_users_path, method: :put do |form| %>
  <% @users.each do |user| %>
    <%= fields_for "user[]", user do |f| %>
      <% if @user.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
          <ul>
          <% @user.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
          </ul>
        </div>
      <% end %>
      <div class="field">
        <%= f.label :username %><br>
        <%= f.text_field :username %>
      </div>
      <div class="field">
        <%= f.label :sunday %><br>
        <%= f.text_field :sunday %>
      </div>
      <div class="field">
        <%= f.label :monday %><br>
        <%= f.text_field :monday %>
      </div>
      <div class="field">
        <%= f.label :tuesday %><br>
        <%= f.text_field :tuesday %>
      </div>
      <div class="field">
        <%= f.label :wednesday %><br>
        <%= f.text_field :wednesday %>
      </div>
      <div class="field">
        <%= f.label :thursday %><br>
        <%= f.text_field :thursday %>
      </div>
      <div class="field">
        <%= f.label :friday %><br>
        <%= f.text_field :friday %>
      </div>
      <div class="field">
        <%= f.label :saturday %><br>
        <%= f.text_field :saturday %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
  <% end %>
  <%= submit_tag "Submit" %>
<% end %>

0 个答案:

没有答案