您如何处理允许用户将子对象添加到父级而不需要他们导航到父级?
例如,添加期刊文章而无需导航到期刊并首先发布?父母也可能不存在。
我宁愿不让数据输入为用户繁重,因此让他们找到日志或创建它然后找到或创建一个问题似乎有点多。我宁愿只有一个包含日记和问题字段的表单。如果不是因为用户对文章而不是期刊或问题感兴趣,那么逻辑就很简单了。
您是否只需修改子项的创建,以便找到或创建父项?
答案 0 :(得分:6)
我假设您有一个期刊模型,其中包含许多文章和属于期刊的文章模型。首先,您应该创建通过期刊而不是通过期刊的文章控制器的路线:
ActionController::Routing::Routes.draw do |map|
map.resources :journals, :has_many => :articles
map.resources :articles
end
现在,您可以使用网址/articles/new
或/journals/1/articles/new
开启文章控制器的新操作。然后在文章控制器的新操作中,执行以下操作:
@article = Article.new(:journal_id => params[:journal_id])
将文章的journal_id
设置为传入的参数。如果没有传递参数,则journal_id将为nil。
在ERB模板中,您只需执行此操作即可创建下拉列表:
<%= f.collection_select :journal_id, Journal.all(:order => "name"), :id, :name, :include_blank => true %>
然后用户可以选择日记,但如果传入日记,则会预先选择正确的值。