#<Api::V1::TasksController 的未定义局部变量或方法“permitted_task_attributes”
undefined local variable or method `permitted_task_attributes’ for #<Api::V1::TasksController
我有一个遵循 Spree/Solidus 范例的解决方案,它封装了允许的参数。我无权改变它,只能效仿。但是,我遇到了一个无法重现的问题,它是未定义的局部变量或方法 `permitted_task_attributes' for #Api::V1::TasksController:0x0000000000b7c0.
代码如下:
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
end
controller/api_controller.rb
class ApiController < ApplicationController
before_action :set_api_request
private
def set_api_request
request.format = request.format == :xml ? :xml : :json
end
end
lib/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
end
lib/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
但我仍然有未初始化的常量错误。我该如何解决这个问题?
因此,我已将 strong_parameters.rb 移出 /lib
并将其移至控制器问题。我也将 permitted_atrributes.rb 移出了 /lib
目录。然后我在 tasks_controller.rb 中包含 strong_parameters.rb 例如include StrongParameters
.
问题是控制器无法识别 strong_parameters.rb 中的 permitted_task_attributes
方法并抛出错误。
我有一个遵循 Spree/Solidus 范例的解决方案,它封装了允许的参数。我无权改变它,只能效仿。但是,我遇到了一个无法重现的问题,它是未定义的局部变量或方法 `permitted_task_attributes' for #Api::V1::TasksController:0x0000000000b7c0.
代码如下:
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
end
controller/api_controller.rb
class ApiController < ApplicationController
before_action :set_api_request
private
def set_api_request
request.format = request.format == :xml ? :xml : :json
end
end
lib/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
end
lib/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
但我仍然有未初始化的常量错误。我该如何解决这个问题?
因此,我已将 strong_parameters.rb 移出 /lib
并将其移至控制器问题。我也将 permitted_atrributes.rb 移出了 /lib
目录。然后我在 tasks_controller.rb 中包含 strong_parameters.rb 例如include StrongParameters
.
问题是控制器无法识别 strong_parameters.rb 中的 permitted_task_attributes
方法并抛出错误。