2015-11-07 2 views
-1

Я не могу понять, как выполнить то, что я пытаюсь сделать здесь, в моем методе create.Как проверить, существует ли значение в params.permit?

Что я сейчас работаю, если нет значений, элемент удален. Однако, если существует 1 или более значений параметра, оно проходит и сохраняется. Не то, что мне было нужно. Мне нужен сценарий «все или ничего». Я хочу сохранить, только если все допустимые ключи имеют значение. params.permit(:name, :description, :copyright)

Прежде, чем запись будет сохранена с использованием organizations.save!, мне нужно убедиться, что ни один из параметров, которые разрешены, не равен нулю или пуст.

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

Вот мой код:

class OrganizationsController < ApplicationController 

    def index 
    query_params = params.permit(:id, :name,) 
     if query_params.blank? 
      organizations = Organization.all 
     else 
      organizations = Organization.where(query_params) 
     end 
     render json: organizations, root: "organizations" 
    end 

    def create 
    organizations = Organization.new(organization_params) 

     if organization_params.present? 
      organizations.delete 
     else 
      organizations.save! 
      render json: organizations 
     end 
    end 

    private 
     def organization_params 
     params.permit(:name, :description, :copyright) 
    end  

end 
+0

Когда вы говорите «Я поиск по всему», вы должны помочь нам понять, что «во всем» означает, давая нам ответ *, где * Вы искали, что вы пробовали, скажите нас, почему это не сработало. Это помогает избежать траты времени, когда мы пытаемся вам помочь. Как и мы, мы также получаем «поиск по всему», поскольку мы стараемся помочь вам, замедляя время отклика и, возможно, задавая вопросы, чтобы узнать, что вы сделали. –

+0

@theTinMan Я googled, проверил различные сайты, документацию и т. Д. – Awatatah

+0

Спасибо, но это мало нам подсказывает. Помогите нам, сказав, что вы пытались помочь нам избавиться от возможностей. Поместите эту информацию в вопрос. –

ответ

1

Вы должны добавить валидации к вашей модели. С вашего вопроса я понимаю, что вы хотите сохранять данные только в том случае, если вы получаете значения во всем поле, если вы не хотите сохранять, правильно ?. Если да, то добавление валидации в вашу модель даст вам то, что вы хотели.

Добавьте следующие модели организации

validates_presence_of :name 
validates_presence_of :description 
validates_presence_of :copyright 

делая так, что пользователь не будет позволено сохранить детали до тех пор пока все три поля не имеют какое-то значение в нем.

Нет необходимости использовать удаление, поскольку неполная информация не будет сохранена.

все больше и расширенной информации click here

+0

Это сработало спасибо! – Awatatah

0

Чтобы проверить ни один из значений organization_params хэша empty, вы можете сделать что-то вроде этого:

organization_params.values.all? { |x| !x.empty? } 

или это:

organization_params.all? { |k,v| !v.empty? } 

Вы также можете проверить, пусто ли какое-либо значение параметра:

organization_params.any? { |k,v| v.empty? } 

Таким образом, ваш метод create может быть переписан как:

def create 
    organizations = Organization.new(organization_params) 

    if organization_params.any? { |k,v| v.empty? } 
     # at least one param is empty, so delete the record 
     organizations.delete 
    else 
     # all the params values are present, so save the record 
     organizations.save! 
     render json: organizations 
    end 
    end 
+0

Я проверил ваш код, но я получаю 'true', когда я даю только значения': name' и ': description'. Я не получаю 'false', когда присутствуют все ключевые значения': name,: description, copyright. Хотя ваш код имеет логический смысл ... – Awatatah

+1

Отмените тест в блоке и используйте 'any?' Вместо 'all?'. Там может быть большая разница во времени обработки, когда есть много предметов для проверки. –

+0

@Awatatah вы хотите получить 'false', когда присутствуют все параметры? Вы хотите сохранить запись только в том случае, если все параметры присутствуют, в противном случае удалите запись, правильно ли я понял? –

Смежные вопросы