Rails: неопределенный метод `any? 'для ноля: NilClass - PullRequest
0 голосов
/ 21 января 2019

Я получаю эти параметры в консоли:

category_id" # => ["", "14", "16", "17"]

Когда я проверяю, является ли массив пустым или нет внутри модели с этим:

@category = category_id.any?

возвращает следующую ошибку:

undefined method `any?' for nil:NilClass

У меня есть такие сильные параметры:

:category_id => []

Любые идеи о том, как проверить, является ли этот массив пустым или нет?

def new
  @account = Account.new
  @categories.build
end

def create
  @account = Account.new(account_params)

  respond_to do |format|
    if @account.save
      format.html { redirect_to accounts_path, notice: 'Account was successfully added.' }
      format.json { render :index, status: :created, location: @account }
    else
      format.html { render :new }
      format.json { render json: @account.errors, status: :unprocessable_entity }
    end
  end
end

def account_params
  params.require(:account).permit(:name, :street, :street_2, :city, :state, :postal_code, :country, category_id: []
end

Результаты консоли:

"account"=>{"name"=>"", "street"=>"", "street_2"=>"", "city"=>"",  "state"=>"", "postal_code"=>"", "country"=>"", "category_id"=>["", "14", "15"]

1 Ответ

0 голосов
/ 21 января 2019

@ переменные недоступны внутри модели. Ни один из параметров.

Хорошей практикой является не пытаться делать это, но вот несколько способов сделать это:

Если вы хотите передать значение, которое является полем / столбцом базы данных:

# In the controller
account = Account.new(:category => @category)

# In this example, :category is a database field/column of the 
# Account model, not sure if that's accurate for you.

Если нет, то вы должны использовать attr_accessor следующим образом:

# In the model
class Account < ActiveRecord::Base
  attr_accessor :category

#In the controller (this is equivalent to the first example)
account = Account.new
account.category = @category

Использование attr_accessor ничего не сохраняет в базу данных, но контроллер не знает разницы (что хорошо). Это позволяет перемещать данные так, как вы хотели.

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