0


こんにちは。
私は、Rails 5アプリケーションのログプロセスをapplication controllerの中に作成しています。私はbefore_saveプロパティを持つ多くのコントローラ内のログプロセスを呼び出すためにそこに作成しています。ログは、ユーザがformに行った変更をedit view templateに保存します。問題は、の中に<ObjectController:>を入れることができないことです。私はすでにinstance variableをコントローラから取得しましたが、コントローラオブジェクトからstrong parametersを取得する必要があるため、ObjectControllerも必要です。 strong parametersは、ユーザーが入力フィールドに挿入したすべてのデータを保持します。アプリケーションコントローラのコントローラオブジェクトとコントローラの強力なパラメータを取得する

これは私がすでにやったです:

アプリ/コントローラ/アプリケーションコントローラ

def log 
    @controlr = instance_variable_get("@#{controller_name.singularize}") #get the edited object 
    attribs = @controlr.attribute_names #get object table column names 
    edited_data = controlr_params #stuck here! 
    ctrlr = @controlr.attributes #retrive object data from db 
    ... 
    ##compare the edited_data with the actual data from db and check if something was changed 
end 

だから、私は、ユーザー場合と比較するために、強力なパラメータにアクセスするコントローラオブジェクトを取得する必要があります任意のデータを編集しました。私はこれが最良の方法であるか、これを行うための練習であるかはわかりません。より良い方法があれば、私は知りたいです。しかし、私はデータログを必要とする多数のコントローラーでこのプロセスを呼び出す必要があります。あなたの時間と残念に任意の悪い英語のための
おかげ..

答えて

0

あなたは常にselfを呼び出すことによって、コントローラオブジェクトの現在のインスタンスにアクセスすることができparams方法は、あなたの目標を達成するために、あなたを助けにはなりません(が、それは試してみる価値がある)場合任意のインスタンスメソッドまたはアクションのコンテキストで使用します。

byebugをテストするには、ブラウザでそのアクションを追加のパラメータで呼び出し、コンソールにselfと入力します。コントローラで例えば

、:ブラウザで

class UsersController < ApplicationController 
    def show 
    byebug 
    end 
end 

はlocalhost:?3000/some_param = 1234 & another_param =

をテストすることがたくさんあるでしょう便利なもの、例えばself.instance_variables =>[.... :@_request, ... :@_params]

また、requestメソッドには、パラメータを含む現在のリクエストに関するすべての情報が含まれています。

希望すると助かります。

+0

答えは@Vladvです。アプリケーションコントローラ内で「self」を使用すると、コントローラオブジェクトが返されます。しかし、今、私は "entity_controller"内の "entity_params"プライベートメソッドを取得する必要があります。このメソッドを印刷しようとすると、「paramが見つからないか、値が空です:Entities」というエラーがスローされます。 privateメソッドを返す新しいメソッドを定義すると、#というプライベートメソッド 'testeParams 'がスローされます。これらのパラメータを取得するにはどうすればよいですか? – Chimmichunga

関連する問題