用户拥有许多网站,网站有很多关键字。 (关键字是网站资源的嵌套资源)
目前,使用默认的脚手架设置,一次添加多个关键字非常繁琐。我想要一个文本区域而不是文本字段,允许用户在自己的行上键入许多关键字,并一次性提交所有关键字。表单上的唯一输入是关键字的“文本”列。
我该怎么做?
我可以找出params[:keyword][:text].split("\r\n").each do |text|
之类的内容,但我不确定如何与Rails表单进行交互。
<%= form_for [@website, @keyword] do |f| %>
<% if @keyword.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@keyword.errors.count, "error") %> prohibited this keyword from being saved:</h2>
<ul>
<% @keyword.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :text %><br />
<%= f.text_area :text %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
您是否考虑过分析以逗号分隔的关键字(如果您的关键字是单个'字词',则甚至是spaces
)?我认为这更常见......至少在我的经验中。
对于逗号,它就像:line.split(',')
一样简单。
在&amp;之前删除空格逗号后:line.split(/\s*,\s*/)
或 line.split(',').map{|k| k.strip}
。
答案 1 :(得分:0)
网站可能有很多关键字。
我建议您查看:http://railscasts.com/episodes/197-nested-model-form-part-2
答案 2 :(得分:0)
如果您希望关键字使用类似用户界面的标记,请使用jQuery Tag it!的输入然后您可以使用某个模型callbacks解析它以适合has_many关系或使用full tags like solution
答案 3 :(得分:0)
(注意:我最初将其作为编辑粘贴在原始帖子上,所以我反而将其复制并粘贴,因此这是最好的答案)
这是我最后做的事情。它很草率(我是一个Ruby noob),但它保存了有效的关键字,并使用失败关键字列表呈现“新”:
# keywords_controller
def create
invalid_keywords = []
valid_keywords = []
params[:keyword][:text].split("\r\n").map(&:strip).delete_if {|text| text == ""}.each do |text|
keyword = @website.keywords.new(:text => text.downcase)
if keyword.save
valid_keywords << keyword
else
invalid_keywords << keyword
end
end
if invalid_keywords.empty? # All keywords saved
redirect_to @website, :notice => "Keyword(s) added"
else # These keywords didn't save
@keyword = @website.keywords.new(:text => invalid_keywords.map(&:text).join("\r\n"))
@errors = invalid_keywords.first.errors
flash[:success] = "#{valid_keywords.count} keywords were saved"
flash[:alert] = "#{invalid_keywords.count} keywords did not save (shown below)"
render :action => "new"
end
end