【问题标题】:Rails 5.2.3 missing required keys: [:id] in new.html.erb formRails 5.2.3 缺少必需的键:new.html.erb 形式的 [:id]
【发布时间】:2021-02-05 09:10:22
【问题描述】:

我是 Ruby on Rails 的新手。

我有这个控制器:

class MynewsController < ApplicationController
    skip_before_action :authenticate_user!

    def new
    end

    def show
    end

    def create
        render plain: params[:mynew].inspect
    end
end

routes.rb 中的这一行:

 resources :mynews

还有这个 new.html.erb 文件:

<h1>New Mynews</h1>

<%= form_with scope: :mynew, local: true do |form| %>
    <p>
      <%= form.label :title %><br>
      <%= form.text_field :title %>
    </p>
   
    <p>
      <%= form.label :body %><br>
      <%= form.text_area :body %>
    </p>
   
    <p>
      <%= form.submit %>
    </p>
  <% end %>

它显示表单,当我点击提交时,它显示预期的No route matches [POST] "/mynews/new" 错误

问题是当我在 form_with 行中添加 url 参数时:

<%= form_with scope: :mynew, url: mynews_path, local: true do |form| %>

http://localhost:3000/mynews/new 不显示表单并给出

No route matches {:action=>"show", :controller=>"mynews"}, missing required keys: [:id]

错误。

我找不到问题所在。你能帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    与其使用form_with scope:,不如试试这个。

    在控制器的new 操作中,您需要创建一个新的未保存记录。我不知道你的模型叫什么,所以我根据你的控制器名称猜测:

    def new
      @mynew = Mynew.new
    end
    

    接下来,在你看来,做这样的表格:

    <%= form_with model: @mynew, local: true do |form| %>
    

    它会为你处理路径等。

    但是,我怀疑您的模型可能不称为 Mynew,在这种情况下,您必须指定 url。

    假设您的模型实际上被称为 Article,我建议您也将控制器命名为 ArticlesController。如果您希望实际 URL 有所不同,您可以在您的 routes 文件中配置它...但是创建/更新/删除 Article 应该由 ArticlesController 处理,无论用户看到什么 URL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多