我正在建立一个分类的博客。我对如何在表单中实现分类有点坚持。我已经设置了一个有很多直通关系,并希望添加复选框以将博客与多个类别相关联。到目前为止,我将类别传递给视图,我可以将它们列出来,但是由于某种原因我无法让 form_for 方法工作。
这是我的代码。
博客模型
class Blog < ActiveRecord::Base
attr_accessible :body, :title, :image
has_many :categorizations
has_many :categories, through: :categorizations
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
validates :title, :body, :presence => true
end
类别模型
class Category < ActiveRecord::Base
has_many :categorizations
has_many :blogs, through: :categorizations
attr_accessible :name
end
分类模型
class Categorization < ActiveRecord::Base
attr_accessible :blog_id, :category_id
belongs_to :blog
belongs_to :category
end
博客新控制器
def new
@blog = Blog.new
@categories = Category.all
respond_to do |format|
format.html # new.html.erb
format.json { render json: @blog }
end
end
博客新表单视图
<%= form_for(@blog, :url => blogs_path, :html => { :multipart => true }) do |f| %>
<% if @blog.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@blog.errors.count, "error") %> prohibited this blog from being saved:</h2>
<ul>
<% @blog.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.file_field :image %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="field">
Categories:
<% @categories.each do |category| %>
<% fields_for "blog[cat_attributes][]", category do |cat_form| %>
<p>
<%= cat_form.check_box :name %>
</p>
<% end %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
这段代码是我的失败点
<% @categories.each do |category| %>
<% fields_for "blog[cat_attributes][]", category do |cat_form| %>
<p>
<%= cat_form.check_box :name %>
</p>
<% end %>
<% end %>
尽管我并不积极,但由于我目前正在学习,我正在接近其中的任何一个。关于如何实现这一点的任何建议。
谢谢,CG