W jaki sposób attr jest dostępny w Rails 4?
attr_accessible
wygląda na to, że nie działa już w moim modelu.
Jaki jest sposób na masowe przypisanie w Rails 4?
5 answers
Rails 4 używa teraz silnych parametrów.
Ochrona atrybutów jest teraz wykonywana w kontrolerze. To jest przykład:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Nie trzeba już ustawiać attr_accessible
w modelu.
Radzenie sobie z accepts_nested_attributes_for
Aby używać accepts_nested_attribute_for
z silnymi parametrami, musisz określić, które zagnieżdżone atrybuty mają być na białej liście.
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
Słowa kluczowe są oczywiste, ale na wszelki wypadek możesz znaleźć więcej informacji o silnych parametrach w rails Action Controller guide .
Uwaga : jeśli nadal chcesz używać attr_accessible
, musisz dodać protected_attributes
do twojego Gemfile
. W przeciwnym razie będziesz miał do czynienia z RuntimeError
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 14:29:42
Jeśli wolisz attr_accessible, możesz użyć go również w Rails 4. Powinieneś go zainstalować Jak gem:
gem 'protected_attributes'
Potem możesz użyć attr_accessible w modelach jak w Rails 3
Również, i myślę, że jest to najlepszy sposób-używanie obiektów formularza do radzenia sobie z masowym przypisaniem i zapisywanie zagnieżdżonych obiektów, a także możesz użyć gem protected_attributes w ten sposób
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-03 18:16:40
Możemy użyć
params.require(:person).permit(:name, :age)
Gdzie person jest modelem, możesz przekazać ten kod na metodzie person_params i użyć zamiast params [: person] w metodzie create lub innej metodzie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-05 10:56:17
1) Zaktualizuj Devise tak, aby mógł obsłużyć Rails 4.0, dodając tę linię do pliku Gemfile Twojej aplikacji:
gem 'devise', '3.0.0.rc'
Następnie wykonaj:
$ bundle
2) Dodaj ponownie starą funkcjonalność attr_accessible
do rails 4.0
Spróbuj użyć attr_accessible
i nie komentuj tego.
Dodaj ten wiersz do pliku Gemfile Twojej aplikacji:
gem 'protected_attributes'
Następnie wykonaj:
$ bundle
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-02 04:31:55
Aktualizacja dla Rails 5:
gem 'protected_attributes'
Wygląda na to, że już nie działa. Ale daj:
Gem 'protected_attributes_continued'
Spróbuj.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-18 00:16:23