param丢失或值为空:

问题描述 投票:0回答:2

进入视图页面时,显示错误“param is missing or value is empty:restaurant”。 - 我通过删除“require(:restaurant)”来解决问题,但是真的不明白这个伎俩...你呢? - 我正在寻找一个解决方案,让我保持“要求(:餐厅)......任何想法?

restaurants_controller.rb

class RestaurantsController < ApplicationController
  before_action :set_restaurant, only: [:show, :edit, :update]
  def index
    @restaurants = Restaurant.all
  end

  def show
  end

  def new
    @restaurant = Restaurant.new(params.permit(:name, :address, :category))
  end

  def create
    @restaurant = Restaurant.new(restaurant_params)
    @restaurant.save
    redirect_to restaurant_path(@restaurant)
  end

  private

  def set_restaurant
    @restaurant = Restaurant.find(params[:id])
  end

  def restaurant_params
    params.require(:restaurant).permit(:name, :address, :category)
  end
end

new.html.erb

<%= simple_form_for(@restaurant) do |f| %>
  <% if @restaurant.errors.any? %>
    <div class="errors-container">
      <ul>
        <% @restaurant.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <%= f.input :name %>
  <%= f.input :address %>
  <%= f.input :category %>
  <%= f.submit "add a resto", class: "btn btn-primary" %>
<% end %>

restaurant.rb

class Restaurant < ApplicationRecord
  validates :name, :address, :category, presence: true
  validates :category, inclusion: { in: ["chinese", "italian", "japanese", "french", "belgian"]}
  has_many :reviews, dependent: :destroy
end

路线

Rails.application.routes.draw do
  resources :restaurants, only: [:new, :create, :show, :index] do
    resources :reviews, only: [ :new, :create ]
  end
end
ruby-on-rails forms parameters controller back
2个回答
0
投票

表单的输入应该如下命名:

    restaurant[name]
    restaurant[address]
    restaurant[category]

它可能是这样的:

name
address
category

您可以通过检查来调试您的参数。您可以在控制器的restaurant_params中执行以下操作:

raise params.inspect

或者打开浏览器的调试控制台,查看发布的内容。

正如评论中所提到的,您可以在新方法中使用restaurant_params,但我不认为修复您发布它更可能是表单是问题。

# instead of
Restaurant.new(params.permit(:name, :address, :category))
# do
Restaurant.new(restaurant_params)

0
投票

我假设您尝试使用一些传递的属性在new视图上自动填充表单。

你的restaurant#new正在寻找一个params [:restaurant]哈希来创建一个新的Restaurant对象而无法找到它。看看你是如何调用new动作以及传递了什么参数 - 我的猜测是你没有传递任何参数,或者你将它们传递给root参数哈希,如params[:name]params[:address]而不是params[:restaurant] => { :name => 'name'}

大多数new动作都是GET,所以如果你使用内联URL参数,就像http://address.com/restaurant/new?restaurant[name]=Bistro&restaurant[category]=burgers一样

© www.soinside.com 2019 - 2024. All rights reserved.