MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoid w/ Rails, attr_accessible --> Nessun metodo trovato

Ok, ho trovato il problema.

Prima di tutto, presumo che tu stia usando Rails 4. Il motivo per cui ricevi questo errore è che attr_protected e attr_accessible sono stati rimossi da Rails 4 e collocati nella loro gemma. Rails sta ora incoraggiando un nuovo modello di protezione. Puoi leggere questo in README . Se desideri continuare a utilizzare il vecchio comportamento, devi includere la protected_attributes gem . Spero di esserti stato d'aiuto.

EDIT:ho aggiunto un chiarimento di seguito poiché è probabile che questo sia un problema comune con gli utenti che eseguono l'aggiornamento a Rails 4.

Se desideri continuare a utilizzare attr_accessible , ovvero il modo Rails 3, aggiungi semplicemente gem protected_attributes al tuo Gemfile.

Se vuoi iniziare a fare le cose in modo Rails 4, non devi più usare attr_accessible . È invece necessario spostare la logica di autorizzazione dell'attributo nel controller. Ecco un esempio:

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