当我尝试从 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 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

将数据库模型转换为 Ruby On Rails 上的模型

如何从 ruby​​ on rails 上的现有远程 oracle 数据库中获取数据

Ruby on Rails 中的表关联

如何在 ruby​​ on rails 中发布数据

Ruby on Rails SPARQL 客户端

Ruby on Rails - Heroku上的Carrierwave错误