2

1) HAML で DB を表示するためにいくつかのレコードを取得しています。各行の属性メソッドはハッシュを返します。ハッシュのキーは文字列です。それらの鍵を記号に変えるべきですか? への呼び出しがそれだけのsymbolize_keys価値があるかどうかはわかりません。すなわち、

%td #{app['comment']}

また

%td #{app[:comment]

2) 返されるハッシュの配列を記号化しようとしていますが、うまくいきません:

rows = Comment.all(:order => 'created DESC')
result = rows.each_with_object([]) do |row, comments|
   comments << row.attributes.symbolize_keys
end

記号化されたハッシュを実際にコメント配列にプッシュしていませんか? も試しsymbolize_keys!ましたが、役に立ちませんでした。私は何を間違っていますか?

4

2 に答える 2

1

Railsを使用しているHashWithIndifferentAccessので、次の両方を許可することで、「文字列または記号」の問題を非常に簡単に回避できるようにアクセスできます。

h = HashWithIndifferentAccess.new(some_model.attributes)
puts h['id'] # Gives you some_model.id
puts h[:id]  # Also gives you some_model.id

あなたのeach_with_objectアプローチ:

result = rows.each_with_object([]) do |row, comments|
  comments << row.attributes.symbolize_keys
end

うまくいくはずなので、それに関するあなたの問題は他の場所にあると思います。

于 2013-02-14T03:09:15.813 に答える
1

直接ActiveRecord::Base#attributes[your_attribute]ではなく使用する理由はありますか?ActiveRecord::Base#your_attributeあなたは理由を述べませんでした。

ActiveRecord::Baseデータベースフィールドのアクセサを自動的に設定します。

object = Model.new
object.your_column = "foo"  # Writer
object.your_column          # Reader

を介して値にアクセスする代わりに、ビューでリーダーを使用できるはずですActiveRecord::Base#attributes

アップデート:

これがあなたを混乱させるものであるかどうかはわかりません。

Comment.find(:all)データベース内のそれらの行のすべての列の値をすでに取得し、それらをCommentオブジェクト(以下に割り当て@commentsます)に格納します。値はすでにCommentオブジェクトに保存されているため、ビューで自由に使用できます。

コントローラで、次の場合:

def index
  @comments = Commend.find(:all)  # Fetch columns and rows.
end

これは、HAMLビューで実行できます。

- @comments.each do |comment|     # Iterate through array of Comment objects
  %tr
    %td= comment.comment          # Use value for "comment" column.
于 2013-02-14T03:15:46.777 に答える