неопределенный метод создания продукта / для нулевого класса - PullRequest
0 голосов
/ 23 мая 2019

В приведенных ниже кодах я столкнулся с двумя проблемами:

  1. Я пытался сделать @products.each do |product|, но это отбросило меня назад undefined nill class on product - Я проверил проблемув контроллере продукта, но он все еще не определен.

  2. , когда я пытался создать новый продукт из простой формы ниже, но, похоже, он не был сохранен в БД,это из-за проблем с устройством?(это показано в ссылке URL, которая аутентифицирует токен и т. д.) Вот что она показала в ссылке:

    http://localhost:3000/products/new?utf8=%E2%9C%93&authenticity_token=7L5t8CunwqhCGwaCs1L5BXG7WAFBxLE0kbpoDojXeE%2FzzUOPAXVZqXnFRw29OLPD2SsJ%2F%2FHm2EkT0q1qUvxYdQ%3D%3D&product%5Bproduct_name%5D=fvf&product%5Bcondition%5D=dfvd&product%5Bdescription%5D=vdfvdc&commit=Submit

class Product < ApplicationRecord
  belongs_to:user
  validates :product_name, presence: true, uniqueness: true
end
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  has_many:products
    validates :name, presence: true, uniqueness: true

  def show
    @user = User.new
  end
end
class UsersController < ApplicationController

  def show
    @user = User.new
  end
end
  <div id='container'>
  <div class='signup_create_product'>
     <form>

<h1>Create a new product</h1>
      <%= simple_form_for @product do |f| %>
       <%= f.input :product_name,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "product_name" }%>

   <%= f.input :condition,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "condition" }%>

    <%= f.input :description,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "description" }%>

         <div class="form-actions">
                <%= f.button :submit, "Submit" %>
              </div>
            <% end %>

     </form>
  </div>
  <div class='whysign'>
    <h1>Share your beloved products with all over the world!</h1>
    <p>This is an Airbnb style platform that you can create your own products and sell it or purchase from all over the world!</p>

    <i class="fas fa-home"></i><%= link_to 'home',root_path  %>


</div>

  </div>
class ApplicationController < ActionController::Base
  # [...]
  before_action :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    # For additional fields in app/views/devise/registrations/new.html.erb
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])

    # For additional in app/views/devise/registrations/edit.html.erb
    devise_parameter_sanitizer.permit(:account_update, keys: [:username])
  end
end
class ProductsController < ApplicationController

  def index
    @products = Product.all
  end

  def show
    @product = Product.find(params[:id])
  end

  def new
    @product = Product.new
  end

  def create
    @product = Product.new(product_params)

    if @product.save
      redirect_to product_path(@product)
    else
      render :new
    end
  end

  def edit
    @product = Product.find(params[:id])
  end

  def update
    @product = Product.find(params[:id])
    if @product.update(product_params)
      redirect_to product_path(@cocktail)
    else
      render :edit
    end
  end

  def destroy
    @product = Product.find(params[:id])
    @product.destroy
    redirect_to products_path
  end

  private

  def product_params
    params.require(:product).permit(:product_name, :description)
  end
end

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

У вас здесь происходит несколько вещей, но проверьте внимательно, и вполне вероятно, что ошибка "undefined nil class" связана с переменной экземпляра @projects, а не с переменной итерации project. То есть @projects не определено (или вы пытались определить его, и не было возвращено никаких реальных записей). Например, если вы еще не создали ни одного проекта, Project.all, очевидно, вернет nil, и поэтому не будет ничего для перебора с each.

Попробуйте использовать byebug, чтобы проверить, что происходит в контроллере для действия с индексом.

Что касается вашего второго вопроса, здесь не должно быть спора о Devise, потому что Project не является моделью Devise. Но код, который вы включили выше, имеет ложную строку <form> в верхней части - это вполне может вступить в противоречие с form_tag, который вы создаете позже.

0 голосов
/ 23 мая 2019

Это то, что вызывает проблему

def show
    @user = User.new
  end

удалить это из пользовательской модели и пользовательского контроллера

и в контроллере продукта

def update
    @product = Product.find(params[:id])
    if @product.update(product_params)
      redirect_to product_path(@cocktail)
    else
      render :edit
    end
  end

где взять переменную экземпляра @coctail это должно быть @product

и так как вы не разрешаете условие в контроллере продукта, я думаю, вам не нужно

<%= f.input :condition,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "condition" }%>

и обновление

<div id='container'>
  <div class='signup_create_product'>
     <form>

<h1>Create a new product</h1>
      <%= simple_form_for @product do |f| %>
       <%= f.input :product_name,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "product_name" }%>

   <%= f.input :condition,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "condition" }%>

    <%= f.input :description,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "description" }%>

         <div class="form-actions">
                <%= f.button :submit, "Submit" %>
              </div>
            <% end %>

     </form>
  </div>
  <div class='whysign'>
    <h1>Share your beloved products with all over the world!</h1>
    <p>This is an Airbnb style platform that you can create your own products and sell it or purchase from all over the world!</p>

    <i class="fas fa-home"></i><%= link_to 'home',root_path  %>


</div>

  </div>

с

<div id='container'>
  <div class='signup_create_product'>


<h1>Create a new product</h1>
      <%= simple_form_for @product do |f| %>
       <%= f.input :product_name,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "product_name" }%>

   <%= f.input :condition,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "condition" }%>

    <%= f.input :description,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "description" }%>

         <div class="form-actions">
                <%= f.button :submit, "Submit" %>
              </div>
            <% end %>


  </div>
  <div class='whysign'>
    <h1>Share your beloved products with all over the world!</h1>
    <p>This is an Airbnb style platform that you can create your own products and sell it or purchase from all over the world!</p>

    <i class="fas fa-home"></i><%= link_to 'home',root_path  %>


</div>

  </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...