当我尝试从 ruby on rails 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?
Posted
技术标签:
【中文标题】当我尝试从 ruby on rails 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?【英文标题】:When I tried to get input from the Form on ruby on rails, I am getting back hash array instant of simple name. How to solve it? 【发布时间】:2021-12-20 12:44:19 【问题描述】:这是我的 html 代码
<h1>Create new Cat</h1>
<form action="/cats" method= "POST">
<input type="text" name="cat[name]">
<input type="submit" value="Create Cat!">
</form>
当我尝试通过在框中键入 Loki 作为猫名来获取上述代码的输入时,我得到了 Parameters: "cat"=>"name"=> "Loki",保存的名字变成"name"=>"Loki",Json格式为"id":19,"name": ""name"=\u003e"Loki"","created_at":"2021-11-07T07:03:50.140Z","updated_at":"2021-11-07T07:03:50.140Z"强>。
我期望得到的只是“Loki”。
这是我从cats_controller.rb 中创建的方法
def create
#POST /cats
@cat = Cat.new(name: params[:cat].permit(:name))
if @cat.save
redirect_to cat_url(@cat)
else
render :new
#render json: @cat.errors.full_messages, status: :unprocessable_entity
end
end
【问题讨论】:
【参考方案1】:您最好使用强参数,就像 Rails 做事的标准一样。 params[:cat].permit(:name)
只允许参数,不从中读取,您必须执行 params[:cat].permit(:name)[:name]
才能获得名称本身。
不过,如前所述,这是 Rails 的处理方式,代码更简洁。
def create
@cat = Cat.new(safe_params)
# ...
end
def safe_params
params[:cat].permit(:name)
end
【讨论】:
以上是关于当我尝试从 ruby on rails 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章