attr_accessible
parece não funcionar mais dentro do meu modelo.
Qual é a maneira de permitir a atribuição em massa no Rails 4?
fonte
attr_accessible
parece não funcionar mais dentro do meu modelo.
Qual é a maneira de permitir a atribuição em massa no Rails 4?
O Rails 4 agora usa parâmetros fortes .
A proteção de atributos agora é feita no controlador. Isto é um exemplo:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Não é mais necessário definir attr_accessible
o modelo.
accepts_nested_attributes_for
Para usar accepts_nested_attribute_for
com parâmetros fortes, você precisará especificar quais atributos aninhados devem ser incluídos na lista de permissões.
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
As palavras-chave são auto-explicativas, mas por precaução, você pode encontrar mais informações sobre parâmetros fortes no guia do Rails Action Controller .
Nota : Se você ainda deseja usar attr_accessible
, precisará adicionar protected_attributes
ao seu Gemfile
. Caso contrário, você será confrontado com um RuntimeError
.
attr_accessible
precisava ser removido. O que acontecerá se mantivermos?RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
Se você preferir attr_accessible, também poderá usá-lo no Rails 4. Você deve instalá-lo como gem:
depois disso, você poderia usar attr_accessible em seus modelos, como no Rails 3
Além disso, e acho que é a melhor maneira de usar objetos de formulário para lidar com atribuição em massa e salvar objetos aninhados, e você também pode usar a gema protected_attributes dessa maneira
fonte
Podemos usar
onde person é Model, você pode passar esse código em um método person_params e usá-lo no lugar de params [: person] no método create ou no método
fonte
Uma atualização para o Rails 5:
parece não funcionar mais. Mas dê:
gem 'protected_attributes_continued'
uma tentativa.
fonte
1) Atualize o Devise para que ele possa lidar com o Rails 4.0 adicionando esta linha ao Gemfile do seu aplicativo:
Em seguida, execute:
2) Adicione a funcionalidade antiga de
attr_accessible
novo ao Rails 4.0Tente usar
attr_accessible
e não comente isso.Adicione esta linha ao Gemfile do seu aplicativo:
Em seguida, execute:
fonte