【问题标题】:param is missing or the value is empty: breads参数丢失或值为空:面包
【发布时间】:2015-07-09 14:51:27
【问题描述】:

我使用 ruby​​ on rails 文档作为指南,但我卡在第一个表单上。我使用了一个名为“breads”的资源,而不是“文章”资源。但是,当我去 breads/new 提交我的表单时,我收到了错误:

BreadsController#create 中的 ActionController::ParameterMissing 参数缺失或值为空:面包

app/views/breads/new.html.erb:

<h1>New Breads!</h1>
<%= form_for :bread, url: breads_path do |f| %>
  <p>
    <%= f.label :type %><br>
    <%= f.text_field :type %>
  </p>
  <p>
    <%= f.submit %>
  </p>

<% end %>

app/controllers/breads_controller.rb:

class BreadsController < ApplicationController
  def new
  end

  def create
    @bread = Bread.new(bread_params)

    @bread.save
    redirect_to @bread
  end

  private
    def bread_params
      params.require(:bread).permit(:type)
    end
end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您需要更改您的代码,见下文

    new 操作中初始化Bread 类的对象并在new.html.erb 中使用它,convention over configuration rails 会自动将创建操作的 url 分配给表单

    查看

    <h1>New Breads!</h1>
    <%= form_for @bread do |f| %>
      <p>
        <%= f.label :type %><br>
        <%= f.text_field :type %>
      </p>
      <p>
        <%= f.submit %>
      </p>
    
    <% end %>
    

    控制器

    class BreadsController < ApplicationController
      def new
        @bread = Bread.new
      end
    
      def create
        @bread = Bread.new(bread_params)
    
        @bread.save
        redirect_to @bread
      end
    
      private
        def bread_params
          params.require(:bread).permit(:type)
        end
    end
    

    希望有帮助!

    【讨论】:

    • 谢谢!这似乎可行,但你能解释一下为什么我需要去掉表单中的“url:breads_path”位吗?
    • 因为breads_path指向Breads控制器的索引动作,如果有对象也最好使用对象
    • 看起来我使用“类型”作为字段创建了一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多