我正在尝试使用嵌套表单在创建歌曲时为歌曲添加类别标签。表单工作正常,直到我向其添加嵌套属性,现在单击它时提交按钮不执行任何操作(页面不重新加载或任何内容)。
在我的模型中,一首歌通过分类有许多类别,反之亦然。
以下是表格:
<div class="span10 offset1">
<%= form_for(@song) do |f| %>
<%= f.label :title, "Title" %>
<%= f.text_field :title %>
<%= nested_form_for(@song.categorizations.build) do |f| %>
<%= f.label :category_id, "TAG" %>
<%= f.select :category_id, options_for_select(Category.all.collect {|c| [ c.tag, c.id ] }, { :include_blank => true }), prompt: "" %>
<%end%>
<%= f.submit "Save song", class: "btn btn-large btn-primary" %>
<% end %>
</div>
我的歌曲控制器:
def new
@song = Song.new
end
def create
@song = Song.new(params[:song])
if @song.save
flash[:success] = "Song successfully added to library"
redirect_to @song
else
#FAIL!
render 'new'
end
end
分类控制器:
def new
@categorization = Categorization.new
end
def create
@song = Song.find(params[:id])
@categorization = Category.new(params[:categorization])
if @categorization.save
flash[:success] = "Tag added!"
redirect_to song_path(@song)
else
flash[:fail] = "TAG ERROR"
redirect_to edit_song_path(@song)
end
end
提前感谢您的帮助!
答案 0 :(得分:1)
外部形式应该是nested_form_for,而不是内部部分,应该是fields_for。
此外,你可能不应该将它们都命名为f,以避免混淆(虽然我认为它不会阻止它工作)。
<div class="span10 offset1">
<%= nested_form_for(@song) do |f| %>
<%= f.label :title, "Title" %>
<%= f.text_field :title %>
<%= f.fields_for(@song.categorizations.build) do |catsf| %>
<%= catsf.label :category_id, "TAG" %>
<%= catsf.select :category_id, options_for_select(Category.all.collect {|c| [ c.tag, c.id ] }, { :include_blank => true }), prompt: "" %>
<%end%>
<%= f.submit "Save song", class: "btn btn-large btn-primary" %>
<% end %>