Ruby on Rails:新参数不断显示为“允许:false”

时间:2018-08-07 01:38:10

标签: ruby-on-rails ruby forms parameters actioncontroller

我一直在写一个新的RoR应用程序进行练习。这是一个基本应用程序,应该可以用作动物的查找页面。

我一直在为我的页面使用控制器中的Create / New函数。我想这样做,以便用户可以输入动物并将动物保存到SQL数据库。之后,页面应重定向到新创建的动物页面。

这是我的animals_controller.rb:

class AnimalsController < ApplicationController
  def index
    @animals = Animal.all
  end

  def show
    @animal = Animal.find(params[:id])
  end

  def new
  end

  def create
    # render plain: params[:animal].inspect
    @animal = Animal.new(animal_params)

    @animal.save

     redirect_to @animal
  end

  private def animal_params
    params.require(:animal).permit(:name, :scientific_name, :range)
  end

end

这是我的views / animals / new.html.erb:

<h1> Add Animal </h1>

<%= form_for :animal, url: animals_path do |f| %>
    <p>
    <%= f.label :name %> <br>
    <%= f.text_field :name %>
    </p>

    <p>
    <%= f.label :scientific_name %> <br>
    <%= f.text_field :scientific_name %> 
    </p>

    <p>
    <%= f.label :range %> <br>
    <%= f.select :range, ['land', 'sea', 'sky', 'underground'], :prompt => 'Select One' %>
    </p>

    <p>
    <%= f.submit %>
    <p>
    <% end %>

当我尝试输入新动物时,会得到以下信息:

<ActionController::Parameters {"name"=>"cat", "scientific_name"=>"Felis catus", "range"=>"land"} permitted: false>

我想知道为什么当我在animals_controller.rb中有代码指出允许这些参数时,为什么不断得到“ permitted:false”!谁能指出什么或给我一些建议?

2 个答案:

答案 0 :(得分:0)

此行class background{ static func image(){ let backgroundImage = UIImageView(frame: UIScreen.main.bounds) backgroundImage.image = UIImage(named: "bg_name.png") backgroundImage.contentMode = UIViewContentMode.scaleAspectFill self.view.insertSubview(backgroundImage, at: 0) } 存在问题 因为您是在未经许可的情况下直接打印/访问参数,所以请使用render plain: params[:animal].inspect

:animal_params

这行render plain: animal_params.inspect 很好。我想您的创建过程只能完美地工作。

答案 1 :(得分:0)

您的参数应该看起来像

<ActionController::Parameters {"animal" => {"name"=>"cat", "scientific_name"=>"Felis catus", "range"=>"land"} } permitted: false>

还可以通过表格更改:animal to @animal.

或者,您也可以尝试

params.require(:animal).permit(:name, :scientific_name, :range).permitted?