Ruby on rails 有很多:通过赢得';t保存到数据库
我通过分类建立了项目和类别的关联:Ruby on rails 有很多:通过赢得';t保存到数据库,ruby-on-rails,has-many-through,categorization,Ruby On Rails,Has Many Through,Categorization,我通过分类建立了项目和类别的关联: class Item < ActiveRecord::Base has_many :categorizations has_many :categories, :through => :categorizations, :source => :category end class Category < ActiveRecord::Base has_many :categorizations has_many :ite
class Item < ActiveRecord::Base
has_many :categorizations
has_many :categories, :through => :categorizations, :source => :category
end
class Category < ActiveRecord::Base
has_many :categorizations
has_many :items, :through => :categorizations, :source => :item
attr_accessible :name
end
class Categorization < ActiveRecord::Base
belongs_to :item
belongs_to :category
end
问题是,当我点击save(创建项)并检查分类表和控制台上的时,保存的项仍然没有category_id。
因此,新项目及其属性(名称、说明、价格)将正确保存到DB,而不是类别。它不会保存到db
有什么想法吗?(铁路新手)
感谢表单发布到ItemsController#create,并且没有调用CategorizationsController#create(您可以通过一些验证) 您可以使用的接受_嵌套_属性_,让项目的创建操作完成所有工作。诀窍是只创建复选框的类别关联,您可以使用
:reject_if
选项():
app/models/item.rb:
class Item < ActiveRecord::Base
has_many :categorizations
has_many :categories, :through => :categorizations, :source => :category
accepts_nested_attributes_for :categories,
:reject_if => proc{|c| c[:persist].blank?}
end
将参数
放入控制器操作中会很有教育意义,这样您就可以看到从表单发送的哈希值是什么样子的。您的控制器的创建操作是什么样子的?您好@rkb,刚刚通过添加控制器进行了编辑。我希望它能帮助我解决这个问题。哇,谢谢@rkb,通过阅读API和相关内容,我仍在试图理解你的解释。再次感谢,我会尽快回来。这仍然是一个最新的解决方案吗?我得到的“persist”方法不存在。
class CategorizationsController < ApplicationController
def create
@categories = Category.all
Categorization.create(:item_id => item.id, :category_id => category.id)
Categorization.save
end
def edit
end
end
def create
@item = @current_user.items.build(params[:item])
@categories = Category.all
if @item.save
redirect_to @item
else
render 'new'
end
end
class Item < ActiveRecord::Base
has_many :categorizations
has_many :categories, :through => :categorizations, :source => :category
accepts_nested_attributes_for :categories,
:reject_if => proc{|c| c[:persist].blank?}
end
<%= form_for @item do |f| %>
<%# stuff to generate item fields... %>
<%= f.fields_for :categories do |cat| %>
<%= cat.check_box :persist %>
<%= cat.label :name, cat.name %>
<%- end %>
<%# submit button, etc. %>
<%- end %>
def new
@item = Item.new
Category.all.each {|cat| @item.categories.build(cat.attributes) }
end