我一直在写一个新的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这是我的观点/动物/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“!有没有人能指出什么或者给我一些建议?
发布于 2018-08-07 10:07:10
问题出在此行render plain: params[:animal].inspect上,因为您使用:animal_params而是未经许可直接打印/访问参数
render plain: animal_params.inspect这行代码@animal = Animal.new(animal_params)很好。我猜你的创作过程只会完美地工作。
发布于 2018-08-07 10:25:43
你的护理人员应该是这样的
<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?https://stackoverflow.com/questions/51717649
复制相似问题