Независимо от того, что вы делаете, его можно «декомпилировать». Черт, вы можете просто разобрать его. Или посмотрите на дамп памяти, чтобы найти свои константы. Вы видите, что компьютер должен знать их, поэтому ваш код тоже понадобится.
Что делать с этим?
Попытайтесь не отправлять ключ в виде жестко запрограммированной константы в своем code: Храните его как настройку для каждого пользователя. Заставьте пользователя отвечать за этот ключ.
Я предполагаю, что вы используете Rails 4. Если это так, необходимые параметры должны быть отмечены как требуется.
Возможно, вы захотите сделать это следующим образом:
class UsersController < ApplicationController
def create
@user = User.new(user_params)
# ...
end
private
def user_params
params.require(:user).permit(:username, :email, :password, :salt, :encrypted_password)
end
end
Для тех, кто использует CanCanCan:
Вы получите эту ошибку, если CanCanCan не сможет найти правильный метод params.
Для действия :create
CanCan попытается инициализировать новый экземпляр с дезинфицированным вводом, если ваш контроллер будет реагировать на следующие методы (по порядку):
create_params
<model_name>_params
, например article_params (это resource_params
(универсальный метод, который вы могли бы указать в каждом контроллере) Кроме того, load_and_authorize_resource
теперь можно использовать возьмите опцию param_method
, чтобы указать пользовательский метод в контроллере для запуска для дезинфекции ввода.
Вы можете связать параметр param_method
с символом, соответствующим имени метода, который будет вызван:
class ArticlesController < ApplicationController
load_and_authorize_resource param_method: :my_sanitizer
def create
if @article.save
# hurray
else
render :new
end
end
private
def my_sanitizer
params.require(:article).permit(:name)
end
end
источник: https://github.com/CanCanCommunity/cancancan#strong-parameters
В качестве альтернативы вы можете использовать gem Protected Attributes gem , однако это наносит ущерб требованию сильных параметров. Однако, если вы обновляете более старое приложение, защищенные атрибуты предоставляют простой путь для обновления до тех пор, пока вы не сможете реорганизовать attr_accessible на сильные параметры.
hello в моем случае ошибка исправлена, но получение пустого результата - это база данных.
def create
@worklog = Worklog.new(user_params)
@worklog.day = Date.today
@worklog.week = Date.today.strftime("%W").to_i
@worklog.author = User.current
@worklog.save
redirect_to worklogs_path()
end
def user_params
params.require(:worklog).permit(:utf8, :authenticity_token, {:worklog => [:typee, :do, :todo, :feel, :plan_done, :plan, :week_feel, :score, :good, :nogood]}, :commit)
}
Мой оригинальный плагин - https://github.com/ IceskYsl / worklogs
Если вы используете ActiveAdmin, не забывайте, что в блоке регистров модели есть также allow_params:
ActiveAdmin.register Api::V1::Person do
permit_params :name, :address, :etc
end
Они должны быть установлены вместе с контроллерами:
def api_v1_person_params
params.require(:api_v1_person).permit(:name, :address, :etc)
end
В противном случае вы получите сообщение об ошибке:
ActiveModel::ForbiddenAttributesError
Существует более простой способ избежать сильных параметров вообще, вам просто нужно преобразовать параметры в обычный хеш, как:
unlocked_params = ActiveSupport::HashWithIndifferentAccess.new(params)
model.create!(unlocked_params)
Это, конечно, побеждает цель сильных параметров, но если вы находитесь в такой ситуации, как моя (я делаю свое собственное управление разрешенными параметрами в другой части моей системы), это выполнит свою работу.
Для тех, кто использует CanCan. Люди могут испытывать это, если они используют CanCan с Rails 4+. Попробуйте довольно чистое обходное решение AntonTrapps здесь до тех пор, пока CanCan не будет обновлен:
В ApplicationController
:
before_filter do
resource = controller_name.singularize.to_sym
method = "#{resource}_params"
params[resource] &&= send(method) if respond_to?(method, true)
end
и в контроллере ресурсов (например, NoteController):
private
def note_params
params.require(:note).permit(:what, :ever)
end
Обновление:
Вот проект продолжения CanCan под названием CanCanCan, который выглядит многообещающим:
strong_parameter
. Он описан в руководствах Rails: guide.rubyonrails.org/… . – Domon 9 August 2013 в 18:28