我有一个解决方案,遵循狂欢/Solidus的模式,它封装了允许的params。改变它不是我的能力,而是跟随它。但是,对于#Api::V1::TasksController:0x0000000000b7c0,我无法重现未定义的局部变量或方法`permitted_task_attributes‘。
以下是代码:
controller/api/v1/task_controller.rb
module Api
module V1
class TasksController < ApiController
def index
task = Task.all
render json: task
end
def create
task = Task.create!(create_action_params)
if task
render json: task
else
render json: task.errors
end
end
private
def create_action_params
params.require(:task).permit(permitted_task_attributes) # The problem is with this variable `permitted_task_attributes`
end
end
end
endcontroller/api_controller.rb
class ApiController < ApplicationController
before_action :set_api_request
private
def set_api_request
request.format = request.format == :xml ? :xml : :json
end
endlib/controller_helpers/strong_parameters.rb
module ControllerHelpers
module StrongParameters
def permitted_attributes
PermittedAttributes
end
delegate(*PermittedAttributes::ATTRIBUTES,
to: :permitted_attributes,
prefix: :permitted)
def permitted_task_attributes
permitted_attributes.task_attributes
end
end
endlib/permitted_atrributes.rb
module PermittedAttributes
ATTRIBUTES = [
:task_attributes
].freeze
mattr_reader(*ATTRIBUTES)
@@task_attributes = [
:avatar_url, :description, :recorded_on
]
end误差
undefined local variable or method `permitted_task_attributes’ for #<Api::V1::TasksController:0x0000000000b7c0>我确实理解控制器不能访问这个名为permitted_task_attributes的方法,但我无法修复它。我尝试在控制器中包含ControllerHelpers::StrongParameters,但仍然存在未初始化的常量错误。我怎么才能解决这个问题?
发布于 2021-04-21 13:17:12
因此,我已经将strong_parameters.rb从/lib中移出,并将其移至控制器关注点。我也将permitted_atrributes.rb移出了/lib目录。然后,我将strong_parameters.rb包括在tasks_controller.rb中,例如include StrongParameters。
问题是控制器没有识别strong_parameters.rb中的permitted_task_attributes方法,并抛出一个错误。
https://stackoverflow.com/questions/67124421
复制相似问题