1
にHAMLからmongoid親ドキュメントと埋め込まれた文書を永続化
私は次のモデルがあります:シナトラ
class Entry
include Mongoid::Document
field :title, type: String
field :description, type: String
field :made, type: Date
embeds_many :images
embeds_many :videos
embeds_many :files
embeds_many :tags
accepts_nested_attributes_for :images, :videos, :files, :tags
validates_presence_of :title, :description, :tags
validates_uniqueness_of :title, :description
end
class Tag
include Mongoid::Document
field :tag, type: String
embedded_in :entry
embedded_in :note
end
をポストルートは次のようになります。
post '/portfolio/new' do
a = (params[:entry])
a['tags_attributes']['0']['tag'].downcase.split(", ").each_with_index{|value, index| a['tags_attributes'][index.to_s] = {"tag" => value} }
b = Entry.new(a)
b.safely.save!
redirect "portfolio/show/#{b._id}"
end
と私のHAML入力は次のようになります。
%label{:for => "tags"} Tags:
%input{:name => "entry[tags_attributes[0[tag]]]"}
私はRuby/Sinatra/Mongoidで新しく、ドキュメント属性にアクセスする方法を理解しようとしています。動かす。
私がしようとしているのは、http投稿情報を処理して(ほとんどの場合)mongodbに保存できるようにすることです。
入力値をハッシュの適切な場所に配置するhamlメソッドは、試行錯誤の作業で見つけたものです。しかし、DRYを感じていない、確かに埋め込まれた文書を書く良い方法がありますか?特にentry [tags_attributes [0 [tag]]]は非常にうまく感じますが、これを書くにはより良い方法がありますか?
私のルートでは、私は持っているタグの文字列を壊して保存する前に、個々の埋め込み文書としてハッシュ構造に戻します。私はそれがこの情報を解析することについて非常に徹底していると感じています。
これに対処するベストプラクティスは何ですか?