8
  • 生成没有 Active Record 的 Rails 应用程序
  • 为 Mongoid (Mongodb & Mongoid) 添加了适当的宝石
  • 在 config/ 中生成带有 rails 支持的 mongoid.yml 文件
  • 使用典型的 CRUD 路由创建了一个朋友模型和用户控制器

一切正常,除了当我尝试做大量作业时,我得到: "undefined method `attr_accesible' for Friend:Class"

模型,朋友.rb:


    class Friend
      include Mongoid::Document
      field :first_name, :type => String
      field :last_name, :type => String
      field :adjective, :type => String
      attr_accessible :first_name, :last_name, :adjective
    end

development:
  sessions:
    default:
      database: first_development
        hosts:
          - localhost:27017
        options:
        options:
test:
  sessions:
    default:
      database: first_test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        max_retries: 1
        retry_interval: 0

想法?

4

2 回答 2

26

好的,我找到了问题所在。

首先,我假设您使用的是 Rails 4。您收到此错误的原因是它已从 Rails 4 中删除并放置在他们自己的 gem 中attr_protectedattr_accessibleRails 现在鼓励一种新的保护模型。您可以在README中阅读相关内容。如果您想继续使用旧行为,则必须包含protected_attributes gem。希望有帮助。

编辑:我在下面添加了说明,因为这可能是用户升级到 Rails 4 的常见问题。

如果您想继续使用attr_accessible,即 Rails 3 方式,只需添加gem protected_attributes到您的 Gemfile。

如果您想以 Rails 4 的方式开始做事,您必须不再使用attr_accessible. 相反,您必须将属性权限逻辑移动到控制器中。这是一个例子:

class UsersController < ApplicationController
  def create
    # Using params[:user] without calling user_params will throw an error because 
    # the parameters were not filtered. This is just some Rails magic.
    @user = User.new user_params
    if @user.save
      # Do whatever
    else
      render action: :new
    end
  end

  private
  def user_params
    # params.require(:user) throws an error if params[:user] is nil

    if current_user.nil? # Guest
      # Remove all keys from params[:user] except :name, :email, :password, and :password_confirmation
      params.require(:user).permit :name, :email, :password, :password_confirmation
    elsif current_user.has_role :admin
      params.require(:user).permit! # Allow all user parameters
    elsif current_user.has_role :user
      params.require(:user).permit :name, :email, :password, :password_confirmation
    end
  end
于 2013-07-01T16:48:48.890 回答
0

对于任何使用 Rails 5 并发现protected_attributes gem不兼容的读者:

您不需要attr_accessible,因为不再可能进行批量分配 https://www.rubyplus.com/articles/3281-Mass-Assignment-in-Rails-5

于 2017-10-13T09:36:18.490 回答