sql >> Databáze >  >> NoSQL >> MongoDB

Mongoid w/ Rails, attr_accessible --> Nebyla nalezena žádná metoda

Ok, našel jsem problém.

Za prvé předpokládám, že používáte Rails 4. Důvodem, proč se vám zobrazuje tato chyba, je to, že attr_protected a attr_accessible byli odstraněni z Rails 4 a umístěni do svého vlastního drahokamu. Rails nyní podporuje nový model ochrany. O tom si můžete přečíst v README . Pokud chcete nadále používat staré chování, musíte zahrnout drahokam Protected_attributes . Doufám, že to pomůže.

EDIT:Níže jsem přidal vysvětlení, protože to bude pravděpodobně běžný problém uživatelů při upgradu na rails 4.

Pokud chcete nadále používat attr_accessible , tj. způsobem Rails 3, jednoduše přidejte gem protected_attributes do vašeho Gemfile.

Pokud byste chtěli začít dělat věci způsobem Rails 4, nesmíte již používat attr_accessible . Místo toho musíte přesunout logiku oprávnění atributů do řadiče. Zde je příklad:

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. Použijte více než jedno schéma na kolekci na mongodb

  2. Jaká je dobrá strategie pro seskupování podobných slov?

  3. Vytvořte model mongoose z výsledků štíhlého dotazu

  4. doporučený způsob instalace mongodb na elastický fazolový stonek