MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoid w/ Rails, attr_accessible --> Nenhum método encontrado


Pronto, encontrei o problema.

Em primeiro lugar, suponho que você esteja usando Rails 4. A razão pela qual você está recebendo este erro é que attr_protected e attr_accessible foram removidos do Rails 4 e colocados em sua própria gem. Rails agora está incentivando um novo modelo de proteção. Você pode ler sobre isso no README . Se quiser continuar usando o comportamento antigo, inclua a gem protected_attributes . Espero que ajude.

EDIT:Adicionei esclarecimentos abaixo, pois é provável que seja um problema comum com os usuários ao atualizar para o Rails 4.

Se você quiser continuar usando attr_accessible , ou seja, o Rails 3 way, basta adicionar gem protected_attributes para o seu Gemfile.

Se você gostaria de começar a fazer as coisas da maneira Rails 4, você não deve mais usar attr_accessible . Em vez disso, você deve mover a lógica de permissão de atributo para o controlador. Aqui está um exemplo:
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