【问题标题】:Rails 3.2 model constructor with Rails 4带有 Rails 4 的 Rails 3.2 模型构造函数
【发布时间】:2014-04-21 15:45:49
【问题描述】:

我的模型构造函数:

3.2:

  def initialize(attributes = {})
    super # must allow the active record to initialize!
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

4.0.4:

ActiveModel::ForbiddenAttributesError

如何更改 3.2 构造函数以兼容 4.0.4?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 model


    【解决方案1】:

    我猜你在尝试从用户控制器创建新用户时遇到此错误?

    如果你有这样的代码:

    class UsersController < ApplicationController
      ...
      def create
        @user = User.new(params[:user])
        ...
      end
      ...
    end
    

    那么这将不起作用,因为您不能再在 Rails 4 中进行批量分配。

    相反,您需要将控制器中的参数列入白名单,如下所示:

    class UsersController < ApplicationController
      ...
      def create
        @user = User.new(user_params)
        ...
      end
      ...
    
      private
    
      def user_params
        params.require(:user).permit(:username, :password, :password_confirmation, :email)   # etc. according to your user model
      end
    end
    

    说了这么多,我不知道为什么你的模型中需要构造函数?从ActiveRecord::Base 继承得到的初始化方法应该足够了。但无论如何,您需要将控制器中的参数列入白名单以避免ForbiddenAttributesError 错误。

    【讨论】:

    • 我删除了构造函数,它可以工作。我也再次输入代码,它再次工作。我认为你是对的,问题是大规模分配。谢谢
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多