gpt4 book ai didi

ruby-on-rails - post 方法如何在 Ruby on Rails 中工作

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:52 25 4
gpt4 key购买 nike

我有 Python 和 Java 背景,只有 CSS、HTML、Ruby 的基础知识,并尝试使用 Ruby on Rails 学习网络开发。我正在尝试按照 Michael Hartl 上的教程进行操作.我不明白 list 7.23 中的 post 方法的参数是什么。

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest

test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, params: { user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
end
assert_template 'users/new'
end
end

根据我在 API 中的追踪,它有两个非可选参数,它们都是字符串,但在 list 7.23 中,第二个参数中突然出现了哈希语法 params:,这让我感到困惑。谁能赐教一下?

最佳答案

我认为您看错地方了,链接显示为 http.post。您需要 IntegrationTest 帖子

发件人:https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/integration.rb

def post(path, **args)
process(:post, path, **args)
end

和:

def process(method, path, params: nil, headers: nil, env: nil, xhr: false, as: nil)
request_encoder = RequestEncoder.encoder(as)
headers ||= {}

# rest
end

编辑:双响

Ruby 2.0 添加了关键字参数 双拼音。当您有未知数量的参数时,基本上会使用单个 splat (*),并将其作为 array 传递。

def with_args(*args)
p args
end

with_args(1,2,"a")
# [1, 2, "a"]

双拼音 (**) 的作用类似于 *,但对于关键字参数:

def with_args(**args)
with_keyword(args)
end

def with_keyword(some_key: nil, other_key: nil)
p "some_key: #{some_key}, other_key: #{other_key}"
end

with_args(some_key: "some_value", other_key: "other_value")
# "some_key: some_value, other_key: other_value"
with_args(some_key: "some_value")
# "some_key: some_value, other_key: "

在 ruby​​ 中,您可以在不使用 () 的情况下调用方法并在不使用 {} 的情况下传递哈希,因此

with_args({some_key: "some_value", other_key: "other_value"})

就像写作

with_args some_key: "some_value", other_key: "other_value")

查看此答案:What does a double * (splat) operator dohttps://medium.freecodecamp.org/rubys-splat-and-double-splat-operators-ceb753329a78

所以...

写作时

post users_path, params: { user: { name:  "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }

是否调用处理

process(:post, users_path, params: { user: { name:  "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }

process中的含义,params是hash

{ user: { name:  "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }

process的其他关键字args无所谓,hash都是params,其他关键字都是nil

希望这是有道理的...

关于ruby-on-rails - post 方法如何在 Ruby on Rails 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com