首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未定义局部变量或方法`permitted_task_attributes‘用于#<Api::V1::TasksController

未定义局部变量或方法`permitted_task_attributes‘用于#<Api::V1::TasksController
EN

Stack Overflow用户
提问于 2021-04-16 11:30:28
回答 1查看 74关注 0票数 0

我有一个解决方案,遵循狂欢/Solidus的模式,它封装了允许的params。改变它不是我的能力,而是跟随它。但是,对于#Api::V1::TasksController:0x0000000000b7c0,我无法重现未定义的局部变量或方法`permitted_task_attributes‘。

以下是代码:

controller/api/v1/task_controller.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
module PermittedAttributes
  ATTRIBUTES = [
    :task_attributes
  ].freeze

  mattr_reader(*ATTRIBUTES)

  @@task_attributes = [
    :avatar_url, :description, :recorded_on
  ]
end

误差

代码语言:javascript
复制
undefined local variable or method `permitted_task_attributes’ for #<Api::V1::TasksController:0x0000000000b7c0>

我确实理解控制器不能访问这个名为permitted_task_attributes的方法,但我无法修复它。我尝试在控制器中包含ControllerHelpers::StrongParameters,但仍然存在未初始化的常量错误。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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方法,并抛出一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67124421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档