我有以下型号:
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,肯定有更好的方法来编写嵌入式文档?特别是条目[tags_attributes [0 [tag]]]感觉很尴尬,有没有更好的方法来写这个?
同样在我的路线中,为了打破我拥有的标签串并在保存之前将其作为单独的嵌入文档存储回哈希结构中。我觉得解析这些信息非常简单。
处理此问题的最佳做法是什么?
答案 0 :(得分: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}