首页 > 解决方案 > 私有参数方法不显示表单数据

问题描述

所以我正在创建一个玩家卡片,它基本上是一个用户的个人资料页面。我在后端遇到的问题是我的私有方法 playercard_params 只返回 user_id,而不是输入到表单中的所有信息......尽管常规参数显示了创建玩家卡所需的所有数据。我认为问题可能出在前端,但向后工作得出的结论是问题出在后端。

这是我的控制器:

class Api::V1::PlayercardController < ApplicationController
    before_action :set_user 

    def index      
        if params[:user_id]
            @playercard = @user.playercard
        else
            @playercard = Playercard.all   
        end
        render json: @playercard
    end

    def show
        @playercard = Playercard.find(params[:id])
        render json: @playercard
    end

    def create

            @playercard = Playercard.new(playercard_params)
            binding.pry 
            if @playercard.save
                render json: @user
            else
                render json: {
                error: @playercard.errors.full_messages.to_sentence
                }
            end
    end

    def update
        @playercard = Playercard.find(params[:id])
            if @playercard.update(playercard_params)
                render json: @playercard
            else
                render json: {
                error: @playercard.errors.full_messages.to_sentence
                }
            end
    end

    private 

    def playercard_params
      params.require(:playercard).permit(:player_nickname, :player_height_in_feet, :player_height_in_inches, :player_weight, :player_age, :player_fav_player, :user_id)
    end

    def set_user
        @user = User.find(params[:user_id])
    end

end

我的玩家卡模型:

class Playercard < ApplicationRecord
    belongs_to :user 

    validates :player_nickname, :player_height_in_feet, :player_height_in_inches, :player_weight, :player_age, :player_fav_player, presence: true
end

和序列化程序,如果有帮助:

class PlayercardSerializer < ActiveModel::Serializer
    attributes :id, :player_nickname, :player_height_in_feet, :player_height_in_inches, :player_weight, :player_age, :player_fav_player

    belongs_to :user
  end

这是我的参数:

<ActionController::Parameters {"playerNickname"=>"white mamba", "playerHeightFeet"=>"6", "playerHeightInches"=>"3", "playerAge"=>"30", "playerWeight"=>"170", "playerFavPlayer"=>"Kobe", "user_id"=>"1", "controller"=>"api/v1/playercard", "action"=>"create", "playercard"=><ActionController::Parameters {"user_id"=>1} permitted: false>} permitted: false>

当我在前端提交表单时,我收到错误说每个字段都是空的......在撬中,如果我输入 playercard_params,只有 user_id 显示(具有正确的 id)

标签: ruby-on-railsrubyreactjs

解决方案


我通过将属性的命名约定与前端和后端对齐来解决了这个问题。它奏效了!

感谢@jvillian 的洞察力!!


推荐阅读