неопределенный метод `map 'для nil: NilClass Вы имели в виду?нажмите - Как исправить? - PullRequest
1 голос
/ 09 июля 2019

Я делаю приложение на Rails, в котором будет что-то вроде «продуктов». Продукты будут иметь фото, название, категорию, код и описание.

Я пробовал много способов, но ни один не помог.

Products_controller's NEW и CREATE методы:

def new
    if !logged_in?
        redirect_to root_path
    end
    if logged_in?
        @product = current_user.products.build
        @categories = Category.all.map{ |c| [c.name, c.id] }
    end
end 
def create
    @product = current_user.products.build(product_params) 
    @product.category_id = params[:category_id]
    if @product.save
        redirect_to root_path
    else 
        render 'new'
    end

HTML-КОД:

<div class="col-md-6 col-md-offset-3">
<div class="deniso">

<% <h1>Shto Produkt:</h1>
   <%= simple_form_for @product, :html => {:multipart => true} do |f| %>
<%= f.file_field :product_img %>
 <div class="cate">  
   <%= select_tag(:category_id, options_for_select(@categories), :prompt => "Zgjidhni kategorine:") %>
  </div> 
  <h4>Emri i produktit</h4>
   <%= f.input :title, label: "Emri i Produktit:" %>
   <h4>Kodi</h4>
   <%= f.input :kodi, label: "Kodi:" %>
   <h4>Qmimi<h4>
   <%= f.input :qmimi, label: "Qmimi:" %>
   <h4>Pershkrimi</h4>
   <%= f.input :pershkrimi, label: "Pershkrimi:" %>
   <div class="btn btn-1">
   <%= f.button :submit %>
   </div>
   <% end %>
   </div>

    <%= link_to "Kthehuni mbrapa", root_path, class: "btn-custom2" %>

    </div>
    </div>
    </div>

КОД ОШИБКИ:

NoMethodError in Products#create
Showing C:/Users/PC/Desktop/Npshkodra/app/views/products/new.html.erb where line #12 raised:

undefined method `map' for nil:NilClass
Did you mean?  tap
<%= f.file_field :product_img %>
 <div class="cate">  
   <%= select_tag(:category_id, options_for_select(@categories), :prompt => "Zgjidhni kategorine:") %>
  </div> 
  <h4>Emri i produktit</h4>
   <%= f.input :title, label: "Emri i Produktit:" %>

Я ожидаю, что продукт будет создан.

EDIT: Я пытался объявить @categories для create метода, но все равно он не работает:

      @categories = Category.all.map{ |c| [c.name, c.id] }
       @product = current_user.products.build(product_params) 
       @product.category_id = params[:category_id]
       if @product.save
           redirect_to root_path
       else 
           render 'new'
       end
    end 
     ```

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Похоже, вы получаете ноль от AR запроса.Чтобы обработать такие ошибки, вы можете попробовать это:

@categories = Category.all.to_a.map{ |c| [c.name, c.id]}

Но результат будет 0, так как их нет.

0 голосов
/ 10 июля 2019

Проверьте вызов map в вашем методе new. @categories = Category.all.map{ |c| [c.name, c.id] } Это может быть причиной ошибки. «AсtiveRecord» возвращает пустой массив, если записи не найдены, но я все равно проверил бы вывод в случае непредвиденной ситуации.

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