Как работает params в Rails 4?

Как поступить, если полей, передаваемых в контроллер, может быть много?
Rails 3.2:
def create
  @item = Item.create(params[:item])
end

Rails 4.0
def create
  @item = Item.create(items_params)
end
#Как работает данная конструкция?
private
  def items_params 
   params.require(:item).permit(:name, :price, :description, :real, :weight) 
  end
end

Пыталась въехать сама, но без сенсея не обойдусь.
  • Вопрос задан
  • 4488 просмотров
Решения вопроса 1
Что значит много?

Данная конструкция призвана перенести контроль над доступными для массового редактирования параметры из модели в контроллер. Ибо там ему и место.

Работает она следующим образом. params - на самом деле не обычный хеш, а объект определенного класса. Когда модель в качестве параметров получает подобный объект, она запрашивает у него список аттрибутов, которые можно редактировать.

К примеру:
params = { user: { email: 'mail@example.com', password: '123' } }


если вы хотите, чтобы можно было редактировать только email, лежащий внутри хеша с пользователем, то пишите: params.require(:user).permit(:email).

В том случае, если вы принимаете в качестве параметра массив: params.permit(:some_hash).require(some_array: [])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы