2013-06-16 5 views
8
  • 生成Railsのアプリケーションのw /アウトアクティブレコード "いいえ方法が見つかりませんでした" "undefined method `attr_accesible' for Friend:Class":レールにconfigが/

すべては私が私が手質量割り当てを実行しようとする場合を除いて働く典型的なCRUDルートで友人のモデルとユーザーのコントローラを作成し Mongoidは/ wのRailsの、attr_accessible - ></li> <li>がmongoid.ymlファイル内に生成されたMongoid(MongoDBの&Mongoid)について</li> <li>を追加しました適切な宝石

  • をサポート

    モデル、friend.rb:

    ​​
    development: 
        sessions: 
        default: 
         database: first_development 
         hosts: 
          - localhost:27017 
         options: 
         options: 
    test: 
        sessions: 
        default: 
         database: first_test 
         hosts: 
         - localhost:27017 
         options: 
         consistency: :strong 
         max_retries: 1 
         retry_interval: 0 
    

    思考?

  • +0

    リンク "http://paul-wong-jr.blogspot.com/2012/03/dynamic-attributes-and-mongodbmongoid.html"には、attr_accessor行を追加するためのattr_accessor:accessという行があります。理由は "#:accessibleは、ゲーム固有のダイナミックフィールドを格納するための変数で、attr_accessibleを介して一括割り当てすることができます。これにより、attr_accessibleを動的に設定することができます。 – user1455116

    +0

    私も同じ問題に遭遇しています。 @ user1455116の提案は機能しませんでした。どのバージョンのレールとモンゴイドを使用していますか? – Max

    答えて

    26

    問題を見つけました。

    まず、Rails 4を使用していると仮定します。このエラーが発生する理由は、attr_protectedattr_accessibleがRails 4から削除され、独自のgemに配置されているためです。 Railsは新しい保護モデルを奨励しています。 READMEでこれについて読むことができます。以前の動作を引き続き使用する場合は、protected_attributes gemを含める必要があります。希望が役立ちます。

    編集:私はあなたが単に追加し、Railsの3ウェイすなわち、attr_accessibleを引き続き使用したい場合、これは4

    レールにアップグレードするユーザーに共通の問題である可能性が高いので、以下の説明を追加しましたgem protected_attributesをGemfileに追加してください。

    あなたがRails 4のやり方をやりたければ、attr_accessibleを使用しなくてはなりません。代わりに、属性許可ロジックをコントローラに移動する必要があります。 Railsの5を使用している読者のために

    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 
    
    +0

    あなたの仮定は正しい - 私はレール4を使用しています。私は自分の開発マシンに乗るときにこれをチェックします – sircapsalot

    +0

    ねえ、あなたがリンクしているreadmeによると、保護モデルはレールの内側にあるようです。 https://github.com/rails/strong_parameters#compatibilityこれは現在レールにバンドルされているので、この作業をするために宝石を使う必要はありません。 – sircapsalot

    +0

    READMEファイルは、現在のRails 4標準である 'strong_parameters'宝石用です。 2番目のリンクは 'protected_attributes'の宝石です。 'protected_attributes'は' attr_accessible'メソッドを含んでいますが、 'protected_attributes'はRails 4から削除されました。レール4で 'attr_accessible'メソッドを使い続けるには、Gemfileに以下を追加する必要があります:' gem 'protected_attributes'' – Max

    関連する問題

     関連する問題