問題タブ [activemodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails 3:ネストされた属性が変更されたかどうかを確認していますか?
フォームが保存されたときにネストされた属性が変更されたかどうかを識別する方法がレールにあるかどうか疑問に思っていますか?
例: 'shop' というモデルがあり、これには配達エリア用のチェック ボックスがネストされています。
「ショップ」が変更されるたびに、ネストされた「配達エリア」属性が変更されたかどうかを知りたいです。何か案は?
ruby-on-rails - 型と変換を伴う構造体
Rubyで次のことを達成しようとしています:
そして、私はそれが両方を受け入れることを望みます:
と
つまり、データ変換を自動的に行いたいのです。
私はRubyが動的であることを知っており、データ型を気にするべきではありませんが、この種の変換は便利です.
私が求めているのは、ActiveRecord が既に行っているのと同様のことです: String をテーブル列で定義されたデータ型に変換します。
ActiveModel を検索した後、この変換を行う TableLess の方法がわかりませんでした。
結局のところ、私の問題は、ActiveModel モジュールによって提供されるよりもはるかに少ないものを必要とするかもしれないと思います。
もちろん、この変換機能を提供するクラスを自分で実装することもできますが、車輪の再発明を避けるために、これがまだ行われていないことを知りたいと思います。
よろしくお願いします。
ruby-on-rails - Railsのデリゲートメソッドに引数を渡す方法
複数のモデルの概要を表示するダッシュボードが必要で、独自のデータなしで Presenter を使用して実装しました。ActiveModel クラスを使用します (データ テーブルなし):
Dashboard.address
デリゲートで、呼び出して返せるようにしたいAccount.find_by_user_id(Dashboard.user_id).address
。
Dashboard が ActiveRecord クラスである場合、宣言するとデリゲートが自動的に機能します (つまり、Account は、Dashboard インスタンスに等しいDashboard#belongs_to :account
アカウントからアドレス属性を返す必要があることを認識します)。user_id
to user_id
しかし、Dashboard は ActiveRecord クラスではないため、宣言できませんbelongs_to
。アカウントに正しいレコードを検索するように指示する別の方法が必要です。
この問題を克服する方法はありますか? (Dashboard を空のテーブルに偽装したり、User のインスタンス メソッドを引数を取るクラス メソッドに書き換えたりできることはわかっています。しかし、これらの解決策はすべて裏技です)。
ありがとうございました。
ruby - アクセサにマップされていないActiveModelフィールド
Rails 3とActiveModelを使用しているので、自分自身を使用できません。ActiveModelベースのオブジェクト内の属性の値を取得するための構文。
次のコードでは、saveメソッドでself.first_nameはnilに評価され、@ attributes [:first_name]は'Firstname'(オブジェクトの初期化時にコントローラーから渡される値)に評価されます。
ActiveRecordではこれは機能するようですが、ActiveModelで同じクラスを構築する場合は機能しません。ActiveModelベースのクラスでアクセサーを使用してフィールドをどのように参照しますか?
ruby-on-rails - カスタムバリデーターをテストするには?
次のバリデータがあります。
lib ディレクトリ内の RSpec でこれをテストできるようにしたいと考えています。これまでの問題は、 を初期化する方法がわからないことですEachValidator
。
ruby-on-rails - Railsモデル変数が予期せず変更される
ここで怒っています。どんなポインタもありがたいことに受け取りました!
配送モデルがあり、配送ラインに基づいて配送状態を更新するメソッドを追加しようとしています。この関数はモデルクラス内で定義され、delivery_stateはモデル属性の1つです。
ログに表示されているのは、2logger.debug
行の間でdelivery_stateがクリアされていることです。
上記のコードでマークされた行をコメントアウトすると、正常に機能しているように見えます。
しかし、リフレッシュした後、この後も配達が期待されていることがわかりますか?
ruby-on-rails - Railsで関係を持ついくつかのオブジェクトを作成する
Railsは初めてです。
サインアップフォームがあり、ユーザーはサインアップと同時にプロジェクトを作成できます。プロジェクトが作成され、新しいユーザーがプロジェクトの「管理者」になります。
私は次のモデルを持っています:
モデルレイヤーでリレーションシップのセットアップをカプセル化して作成し、リレーションシップ内のすべてのオブジェクトについて、フォームの作成、ビューでのエラーの表示などを簡単に行えるようにすることを探しています。
私が明確であることを願っています、レールの初心者です。ありがとう
ruby-on-rails - 戻り時にActiveModel属性をキャストする
Rails 3.1.1プロジェクトには、APIと通信するActiveModelがあります(Paul Dixの本から抜粋したもので、読みやすくするために短縮されています)。
@job
私はコントローラーでインスタンス化します。new
アクション(company_id
ルートのセグメントキーです:)は次の/companies/:company_id/jobs/new
よう になります。
次に、CanCanを使用して、作成するユーザーの権限を確認してジョブを作成します。company_id
基本的に、CanCanはcurrent_userの属性がjobの属性と一致するかどうかをチェックしますcompany_id
。@job.company_id
文字列として返されるため、このチェックは失敗します。
確かに、オブジェクトをインスタンス化するときにparams [:company_id] .to_iを使用できますが、これは後で繰り返す必要がある回避策のようです。
質問:@job.company_id
ジョブActiveModelをより「タイプ認識」にして、呼び出し に対してintを返すようにする方法はありますか?
グーグルでソースコードをチェックactivemodel
しましたが、答えが見つからないようです。どんな助けでも大歓迎です。
更新schema
ActiveResourceのブロックのように、ActiveModelのブロック
のようなものをもっと考えていました。
ruby-on-rails - ActiveRecord 検証エラーに基づく決定
私はレールに非常に慣れていないので、これを行う最善の方法は何だろうと思っています:
データベースにレコードを作成するコントローラーがあります。
特定の検証エラーが発生した場合にフラグを設定したいのですが、慣れ親しんだ Rails パターンでこれを達成する良い方法がわかりません。
私が検出したいモデルの検証は次のとおりです。
私のコントローラーはこれをやっています:
上記のエラーが失敗した場合、作業する ActiveModel エラー コレクションがあります。
タイトルが取得されたことをプログラムで示すフラグを確実に設定するにはどうすればよいですか?
これまで検討してきた
ただし、タイトルが他の理由で失敗した場合、これは true を返します。したがって、次のようなものが必要になります。
しかし、それはメンテナンスの頭痛の種であり、異なるロケールによっても壊れます...
RoRでこれを行う方法を知っている人はいますか?
アドバイスをありがとう
編集: 提案されたフラグ「is_title_duplicated」の使用例:
ruby-on-rails - Rubyでインスタンスを指定してクラスメソッドを呼び出す
Rails ActiveModel を使用しています。次のような 2 つのメソッドを定義しました。
しかし、次のようなより一般的な方法が必要だと思います。
しかし、インスタンスを指定してクラスメソッドを呼び出す方法がわかりません。上記の特定のタスクでは、クラス名「タスク」を指定せずに Task.find を呼び出すことができます
解決策はありますか?ありがとう!