параметр отсутствует или значение пустое: - PullRequest
0 голосов
/ 27 февраля 2019

При переходе на страницу просмотра отображается ошибка «параметр отсутствует или значение пусто: ресторан».- Я решаю проблему, удалив «require (: restaurant)», но не совсем понимаю трюк… не так ли?- Я ищу решение, которое позволило бы мне сохранить "require (: restaurant) ... Любая идея?

restaurant_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

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я предполагаю, что вы пытаетесь автоматически заполнить форму в вашем представлении new с некоторыми переданными атрибутами.

Ваш restaurant#new ищет хэш params [: restaurant] для создания новогоRestaurant объект и не могу его найти.Посмотрите, как вы вызываете действие new и какие параметры передаются - я предполагаю, что вы не передаете их или передаете их в хэш корневых параметров, например params[:name], params[:address]из params[:restaurant] => { :name => 'name'}.

Большинство new действий являются GET, поэтому, если вы используете встроенные параметры URL, введите их как http://address.com/restaurant/new?restaurant[name]=Bistro&restaurant[category]=burgers

0 голосов
/ 27 февраля 2019

Входные данные вашей формы должны быть названы так:

    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)
...