sql >> Database >  >> NoSQL >> MongoDB

Mongoïde met rails, attr_accessible --> Geen methode gevonden

Oké, ik heb het probleem gevonden.

Allereerst neem ik aan dat je Rails 4 gebruikt. De reden dat je deze foutmelding krijgt is dat attr_protected en attr_accessible zijn van Rails 4 verwijderd en in hun eigen edelsteen geplaatst. Rails moedigt nu een nieuw beschermingsmodel aan. U kunt hierover lezen in de README . Als u het oude gedrag wilt blijven gebruiken, moet u de protected_attributes gem opnemen . Ik hoop dat dat helpt.

EDIT:Ik heb hieronder verduidelijking toegevoegd, omdat dit waarschijnlijk een veelvoorkomend probleem is bij gebruikers die upgraden naar rails 4.

Als je attr_accessible wilt blijven gebruiken , d.w.z. de Rails 3-manier, voeg eenvoudig gem protected_attributes toe naar uw Gemfile.

Als je dingen op de Rails 4-manier wilt gaan doen, moet je attr_accessible niet langer gebruiken . In plaats daarvan moet u de logica van de attribuutmachtiging naar de controller verplaatsen. Hier is een voorbeeld:

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


  1. Zoek in MongoDB in een array en sorteer op aantal overeenkomsten

  2. mongodb - array-subset ophalen

  3. Dubbele documenten op _id (in mongo)

  4. Meerdere zoekopdrachten binnen mongodb-query