sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoid con rieles, attr_accessible --> No se encontró ningún método

Bien, he encontrado el problema.

En primer lugar, supongo que está utilizando Rails 4. La razón por la que recibe este error es que attr_protected y attr_accessible se han eliminado de Rails 4 y se han colocado en su propia gema. Rails ahora está fomentando un nuevo modelo de protección. Puede leer sobre esto en README . Si desea continuar usando el comportamiento anterior, debe incluir la gema protected_attributes . Espero que ayude.

EDITAR:Agregué una aclaración a continuación, ya que es probable que sea un problema común con los usuarios que se actualizan a Rails 4.

Si desea continuar usando attr_accessible , es decir, la vía Rails 3, simplemente agregue gem protected_attributes a su Gemfile.

Si desea comenzar a hacer las cosas a la manera de Rails 4, ya no debe usar attr_accessible . En su lugar, debe mover la lógica de permisos de atributos al controlador. Aquí hay un ejemplo:

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