1つのアカウントで別のアカウントに金額を送信するコントローラメソッドを実装しようとしています。 accnts_controller
内のコードは次のとおりです。カスタムレールコントローラメソッドを正しく実装するための苦闘
def donate(amt, client)
if creator?
raise 'Only Patron accounts can donate'
else
@client = Accnt.find(client)
@client.balance += amt
@accnt.balance -= amt
@client.save
@accnt.save
end
end
(注意:私のコントローラでは、私は@accnt
オブジェクトを設定し、アクションの前に持って)これを行うには
は、私は、次のカスタムルートを書かれています:
patch 'accnts/:id/donate' => 'accnts#donate'
私はこの方法を実行して問題のカップルを持ってきたが、遠く離れた最大のものは、私がamt
とに値を渡すことができcURLの要求を作成する方法を知らないということです引数。私が使っているプログラムでは、レールビューの使い方を教えてくれなかったので、バックエンドの有効性をテストするために、私はほとんど独占的にcURLを使用しています。メソッドをテストするためにカールリクエストを書くにはどうすればいいですか?
EDIT:私のフルコントローラコード。これは、足場で生成されたと少しカール要求については
class AccntsController < OpenReadController
before_action :set_accnt, only: %i[show update donate destroy]
# GET /accnts
def index
@accnts = Accnt.all
render json: @accnts
end
# GET /accnts/1
def show
render json: @accnt
end
# POST /accnts
def create
if current_user.accnt
raise 'Already has an account'
else
@accnt = Accnt.new(accnt_params)
@accnt.user = current_user
if @accnt.save
render json: @accnt, status: :created
else
render json: @accnt.errors, status: :unprocessable_entity
end
# render json: @accnt, status: :created, location: @accnt if @accnt.save
end
end
# PATCH/PUT /accnts/1
def update
if @accnt.update(accnt_params)
render json: @accnt
else
render json: @accnt.errors, status: :unprocessable_entity
end
end
# amt is the amount to be sent from the patron to the client, client is the client ID
def donate(amt, client)
# furthermore, I cannot say for certain whether this method of passing parameters is viable in rails
if creator?
raise 'Only Patron accounts can donate'
else
# Very easily could be logical errors here
@client = Accnt.find(client)
@client.balance += amt
@accnt.balance -= amt
@client.save
@accnt.save
end
end
# DELETE /accnts/1
def destroy
@accnt.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
# To be used as a before method to determine whether or not the account in
# question is a creator account
def creator?
creator
end
def set_accnt
@accnt = Accnt.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def accnt_params
params.require(:accnt).permit(:user_id, :user_name, :balance, :creator, :content_type, :content_list)
end
end
を変更されている、私は本当にこれ以上それを書いていない:
API="http://localhost:4741"
URL_PATH="/accnts"
curl "${API}${URL_PATH}/${ID}/donate" \
--include \
--request PATCH \
--header "Content-Type: application/json" \
--header "Authorization: Token token=$TOKEN" \
--data
echo
コントローラとcURLリクエストを追加できますか? –
'amt'と' client'はどのように定義されていますか? (どのようなパラメータを使用していますか?)また、あなたの現在のcURL試行がどのように見えるかを示してください。そうでなければ、間違ったことを知る方法がありません。 –
私は要求されたコードで自分の答えを更新しました。 @TomLord; amtは、donateメソッドを呼び出すアカウントとそれがターゲットとするアカウントの両方のbalanceプロパティを変更するfloatです。一方、clientは、寄付対象のアカウントのidプロパティです。ご覧のように、メソッドの引数に値を渡す方法がわからないので、私のカールのリクエストはまだ完了していません。 – d00medman