構文チェック又は"編集"Ruby on Railsの応用
-
12-09-2019 - |
質問
んでいきたいと思いるRubyおよび最近抜け出した問題と比較した場合の数値をRuby on Railsアプリ。にコントローラまた、以下の声に常にfalseを返した:
if (user.id != params[:id])
この問題は、ユーザーです。idは活動の記録)整数であり、params[id]は文字列です。かかりましたがフィギュアに行った変更いたしました
if (user.id != params[:id].to_i)
現在のとして期待される。
このエラーでは、将来てもらえると助かります"コンパイル"またはルビーに警告するようにしようとした場合に比べ2種類?その他の問題に私たいと思うようになる"をコンパイル"にチェックして
- と自分に言い聞かせ場を作りたい変数がないのです。をチェックのための誤字変数名となります。
- 確認方法が存在するクラスで回避できるメソッド名の誤字とともにリファクタリング、例えば名前の変更メソッドになっています。
私は現在使用Ruby-1.8.6-27RC2のレールを用いて2.3.2とRadRails IDE Windows上でしか利用できません。
解決 6
私が見つけた最良の解決策は、このようなルビーマインなどオンザフライ構文チェックを行ったIDEでした。それは私の元の問題を解決しただろうが、それは私が見つけて、他のいくつかの構文を修正してコンパイルエラーを助けている場合、私はわかりません。ご提案のためにあなたにみんなに感謝します。
他のヒント
テストまず、コード。あなたのアプリケーションのすべての分岐をカバーするテストを書く場合は、そのあなたのコード保証の両方の実行を取得し、正しい結果を生成します。
編集:私は、二つのタイプを比較する機能と指摘して最後の最後まで、メソッド名に依存しない、などすべきルビーの中核機能です。
あなたがオブジェクトにメッセージを送るように多くのメソッドを呼び出すことはありません。オブジェクトは、メソッドを処理する方法を考え出すの責任です。 Railsでは、これはActiveRecordの中でDBの列にアクセスするために使用されます。列名を持つメッセージがオブジェクトに送られるまでの列のメソッドはありません。
Rubyでの静的型付けはダックタイピングシステムに反します。一つは、多くの場合、複雑な継承/インタフェーススキームを気にせずに自由のための多型を得ることができます。
私は、これらの機能を採用し、テストを通じて不確実性を補うことをお勧めします。
Rubyはあなたがオブジェクトの==演算子を再定義することはできません。ルビー1.8では、あなたは、Ruby 1.9のを行うことになったことはできませんが、私は私のスクリプトは、コアクラスのために働いて得ることができませんでした。これは、カスタム定義されたオブジェクトに適しています。
class Object
alias :equal_without_warning :==
def ==(object)
unless self.class == object.class
warn("Comparing `#{self.class}' with `#{object.class}'")
end
equal_without_warning(object)
end
end
私はいくつかの愚かなコーディングエラーをしなかったと仮定すると、答えはNOである:あなたがオブジェクトの異なるタイプを比較しているかどうかを確認することはできません。
。また、私はあなたがいないと言うでしょう。実はルビーがこのように動作するように設計されていない、これはより多くのJavaのアプローチではなく、Rubyのスタイルです。
ルビーは安全であると想定されていません。それはあなたが任意の2つのオブジェクトを比較することができますし、そのパワーの多くはどこから来ているのです。 Railsは、このようなダイナミックなデザインなしには不可能であろう。
JavaやCなどであってもコンパイル言語は、2つのオブジェクトに==をやってからあなたを停止することはありません。ベンが言ったように、それは最初にテストするのが最善です。あなたが作業している構造を調べます。 Rubyのオブジェクトに関する情報を取得するための一つの方法は、使用することです。
puts object.class
一般的には、ダイナミック/スクリプト言語のためにこの種の問題を回避する最善の方法は、(私の知っている)メソッド/コマンドに「ロジック」に移動し、それらのためのユニットテストを書くことです。基本的には、失敗する可能性が何をテストする必要があります。ページ上のコードでは、一定の基準を満たす項目のみダムロジック...というよりも表示する必要があり、それはすべての項目を表示し、のみ表示されるべきものを返すメソッドから項目のリストを取得する必要があります。
二つのことを思い:
一:書を読みIRB(またはスクリプト/コンソール用レール).共通の開発実践のダイナミックに語は試してスニペットのコード内の"生きる"通訳(IRBのレールとコンソール.この慣行に戻ることが最も早く動的言語のようにSmalltalkとLisp.ルビー-デバッグも本当に有用なトラブルシューティング問題とされているかのようになりの誤差はお一例です。
二:本を読み漁り"鴨タイピング"."種類"は、変数の作業が少し違ったRubyでより多くの人に期待しています。私の理解では、変数のようにユーザーです。idがないのに、"タイプ"。の価値 を指摘 によるユーザーです。idない型の変数自体は来ない。その理由がないツールにいたときに行うエラーのためのプログラム。と二つの変数なエラーが変数にないタイプです。ユーザーです。idとパスワードは利用開始による整数の時点のプログラムだが、完全に法的に割り当てます。idインスト文字列は、この比較思っています。:-)