sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoid w/ Rails, attr_accessible --> Ingen metod hittades

Ok, jag har hittat problemet.

Först och främst antar jag att du använder Rails 4. Anledningen till att du får det här felet är att attr_protected och attr_accessible har tagits bort från Rails 4 och placerats i sin egen pärla. Rails uppmuntrar nu en ny skyddsmodell. Du kan läsa om detta i README . Om du vill fortsätta använda det gamla beteendet måste du inkludera protected_attributes gem . Hoppas det hjälper.

EDIT:Jag har lagt till ett förtydligande nedan eftersom detta sannolikt är ett vanligt problem för användare att uppgradera till rails 4.

Om du vill fortsätta använda attr_accessible , det vill säga Rails 3-vägs, lägg helt enkelt till gem protected_attributes till din Gemfile.

Om du vill börja göra saker på Rails 4-sättet får du inte längre använda attr_accessible . Istället måste du flytta attributbehörighetslogiken till styrenheten. Här är ett exempel:

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. MongoDB-anslutning till MongoLab tar timeout i NodeJS på Heroku

  2. MongoDB $toInt

  3. Hur man installerar NodeJS med MongoDB på Ubuntu

  4. Android:min applikation kommer inte att köras eftersom jag måste hantera ett okänt värdundantag. när jag gör det kraschar det