2012-04-26 5 views
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]]]は非常にうまく感じますが、これを書くにはより良い方法がありますか?

私のルートでは、私は持っているタグの文字列を壊して保存する前に、個々の埋め込み文書としてハッシュ構造に戻します。私はそれがこの情報を解析することについて非常に徹底していると感じています。

これに対処するベストプラクティスは何ですか?

答えて

1

HAML

%input{name: 'entry[tags_attributes][][tag]', value: t.tag} 

ルート単に

post '/portofolio/new' do 
    Entry.new(params[:entry]) 
    ... 
end 

は、編集/プットに注意して埋め込まれたIDに

%input{type: 'hidden', name: 'entry[tags_attributes][][id]', value: t.id} 
を忘れないでください
関連する問題