【发布时间】:2015-02-18 15:15:04
【问题描述】:
我正在尝试创建一个锻炼追踪器。我有这些嵌套资源
Routes.rb
resources :days do
resources :workouts
resources :meals
end
我的模型看起来不错:
锻炼.rb
class Workout < ActiveRecord::Base
has_many :exercises
belongs_to :day
end
Day.rb
class Day < ActiveRecord::Base
has_many :workouts
has_many :meals
accepts_nested_attributes_for :workouts, :allow_destroy => true
accepts_nested_attributes_for :meals, :allow_destroy => true
end
问题出在我尝试创建新锻炼时..
../views/workouts/_form.html.haml
= form_for([@day, @workout]), html: {class: 'form-horizontal'}) do |f|
= f.input :workout, label: "What did you work out", input_html: { class: "form-control"}
= f.input :mood, label: "How do you feel", input_html: { class: "form-control"}
= f.hidden_field :day_id, value: params[:day_id], input_html: { class: "form-control"}
= f.submit
我似乎无法保存锻炼与锻炼相关的 :day_id,尽管使用强参数来接收它们。
锻炼控制器.rb
private
def workout_params
params.require(:workout).permit(:day_id, :name, :mood)
end
def find_day
@day = Day.find(params[:day_id])
end
相反,保存的是 :day_id 的 nil
Rails 控制台:
Workout id: 11, name: "Hey", mood: "no", day_id: nil, created_at: "2014-12-19 14:53:29", updated_at: "2014-12-19 14:53:29"
帮忙?
PS - 我试过了
= form_for([@day, @workout]), as: :foo, html: {class: 'form-horizontal'}) do |f|
= f.input :workout, label: "What did you work out", input_html: { class: "form-control"}
= f.input :mood, label: "How do you feel", input_html: { class: "form-control"}
= f.hidden_field :day_id, value: params[:day_id], input_html: { class: "form-control"}
= f.submit
然后
def workout_params
params.require(:foo).permit(:day_id, :name, :mood)
end
但它只是一直说 :foo 参数是空的
【问题讨论】:
-
这行得通吗?
Day.find(params[:workout][:day_id]) -
您可以运行
rake routes并发布报告(或至少包含白天和锻炼路线的部分)吗?
标签: ruby-on-rails ruby nested-forms strong-parameters