我在create
中的plannings_controller
操作时遇到问题。
def new
@plannable = find_plannable
@planning = @plannable.plannings.build
3.times { @planning.periods.build }
respond_to do |format|
format.html # new.html.erb
format.json { render json: @planning }
end
end
def create
@plannable = find_plannable
@planning = @plannable.plannings.build(params[:planning])
respond_to do |format|
if @planning.save
format.html { redirect_to @plannable }
format.json { render json: @planning, status: :created, location: @plannable }
else
format.html { render action: "new" }
format.json { render json: @planning.errors, status: :unprocessable_entity }
end
end
end
def find_plannable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
在#new
操作中,find_plannable
方法返回我想要的值,但在#create
操作中它返回nil,我不知道为什么会发生这种情况。
我的模特就像瑞恩·贝茨(Ryan Bates)在钢轨演员的多态剧集中一样:
#PLANNING MODEL
class Planning < ActiveRecord::Base
attr_accessible :subsubsystem_id, :subsystem_id, :system_id, :plannable_type, :plannable_id, :periods_attributes, :_destroy
has_many :periods, :dependent => :destroy
belongs_to :plannable, polymorphic: true
accepts_nested_attributes_for :periods, :reject_if => lambda { |a| a[:planned_quantity].blank? }, :allow_destroy => true
end
#SUBSUBSYSTEM MODEL
class Subsubsystem < ActiveRecord::Base
attr_accessible :hh, :name, :percentage, :price, :subsystem_id, :total_quantity, :unity, :value, :weight
belongs_to :subsystem
has_many :plannings, :as => :plannable
end
任何人都可以帮助我吗?!提前谢谢!
编辑:参数:
{"utf8"=>"✓",
"authenticity_token"=>"vSr7C1+3+RhYArAmYz+zuAsLXsXriwouF771bn79+Is=",
"planning"=>{"periods_attributes"=>{"0"=>{"planned_quantity"=>"11"},
"1"=>{"planned_quantity"=>"6"},
"2"=>{"planned_quantity"=>"8"}},
"_destroy"=>"0"},
"commit"=>"OK"}
答案 0 :(得分:0)
你是否检查了你的参数似乎你在创造和新的情况下对params有不同的价值。你可以请求创建和新的params哈希,它可以帮助其他人解决你的问题
答案 1 :(得分:0)
在POST参数中,没有匹配/(.+)_id$/
的字段,因此,您在find_plannable
简单的解决方法是,在#new中,在表单内添加plannable_id的隐藏字段。你已经有了@plannable
,所以这很容易。
然后,您将获得plannable_id
及其值find_plannable
。