【发布时间】:2014-03-03 01:35:53
【问题描述】:
我有一个简单的应用程序,其中包含三个模型、类别、项目和分类:
class Category < ActiveRecord::Base
has_many :categorizations, :dependent => :destroy
has_many :projects, :through => :categorizations
end
class Project < ActiveRecord::Base
has_many :categorizations, :dependent => :destroy
has_many :categories, :through => :categorizations
accepts_nested_attributes_for :categorizations
end
class Categorization < ActiveRecord::Base
belongs_to :project
belongs_to :category
end
我想使用一个表单来创建一个新项目并将类别与其关联。为分类模型传递数据的表单部分如下所示:
<div class="field">
<strong>Categories:</strong><br>
<%= f.fields_for :categorizations do |category| %>
<%= collection_check_boxes :categorization, :category_ids, @categories, :id, :display_name %>
<% end %>
</div>
...控制器的相关部分如下所示:
def create
@project = Project.new(project_params)
@categorizations = @project.categorizations.build(categorization_params)
respond_to do |format|
if @project.save && @categorizations.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
def categorization_params
params.require(:project).permit(:project_ids => [], :category_ids => [])
end
当我尝试使用此表单创建新记录时,它成功创建了一个新项目记录,但分类记录没有通过 category_ids。当我查看日志时,它似乎将 category_ids 作为字符串数组传递:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"zt3KGmB20OA28P7Y21QvYjTkJvJg+gQnjOcp//XNB2I=", "project"=>{"slug"=>"new-project-31", "title"=>"New Project 31", "body"=>"Design & research", "published"=>"false"}, "categorization"=>{"category_ids"=>["1", "2", ""]}, "commit"=>"Create Project"}
INSERT INTO "categorizations" ("created_at", "project_id", "updated_at") VALUES (?, ?, ?) [["created_at", Mon, 03 Mar 2014 00:36:09 UTC +00:00], ["project_id", 27], ["updated_at", Mon, 03 Mar 2014 00:36:09 UTC +00:00]]
任何帮助弄清楚如何从表单创建单独的分类记录将不胜感激!
【问题讨论】:
标签: ruby-on-rails arrays activerecord nested-forms