而不是popup:org.eclipse.jdt.ui.PackageExplorer
它应该说它是嵌套的id:
nil
MissedDate Load (0.5ms) SELECT "missed_dates".* FROM "missed_dates" ORDER BY "missed_dates"."id" DESC LIMIT 1
=> #<MissedDate:0x007f8087d86350
id: 12,
habit_id: nil,
level_id: nil,
date_missed: Thu, 10 Sep 2015 00:00:00 EDT -04:00,,
created_at: Tue, 01 Sep 2015 01:21:29 EDT -04:00,
updated_at: Tue, 01 Sep 2015 01:21:29 EDT -04:00>
属于MissedDate
,属于Level
。
用户点击页面/主页:
点击此处Habit
然后他被带到 missed_dates / new ,其中 _form 呈现:
<%= link_to new_habit_level_missed_date_path({ habit_id: habit, level_id: habit.current_habit_level.id }) do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
MissedDatesController
<%= form_for @missed_date, url: habit_level_missed_dates_path({ habit_id: @habit, level_id: @habit.current_habit_level.id }) do |f| %> # This is probably wrong :/
<%= f.date_field :date_missed, class: 'form-control', id: 'six', placeholder: 'dd/mm/yyyy' %>
<%= f.submit %>
<% end %>
路由
def new
@habit = Habit.find(params[:habit_id])
@level = @habit.levels.find(params[:level_id])
@missed_date = MissedDate.new
end
def create
habit = Habit.find(params[:habit_id])
habit.missed_days = habit.missed_days + 1
habit.save!
level = habit.levels.find(params[:level_id])
level.missed_days = level.missed_days + 1
if level.missed_days == 3
level.missed_days = 0
level.days_lost += habit.calculate_days_lost + 2
end
level.save!
head :ok # this returns an empty response with a 200 success status code
@missed_date = MissedDate.new(missed_date_params)
@missed_date.save
end
答案 0 :(得分:2)
通常,当您创建嵌套对象时......您不仅仅是这样创建它:
@missed_date = MissedDate.new(missed_date_params)
如果它嵌套在习惯下,则在关联对象上创建它。在这种情况下:
@missed_date = level.missed_dates.new(missed_date_params)
否则,你根本没有设置level_id。
如果它必须属于习惯和等级,那么你需要确保其他id在params中。