如何显示嵌套资源的 "belongs_to" id?
How to Show Nested Resource's "belongs_to" ids?
而不是 nil
它应该说它嵌套的 id:
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
.
用户在pages/home上点击此处:
<%= 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 %>
然后他被带到 missed_dates/new,在那里呈现 _form:
<%= 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 %>
MissedDatesController
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
路线
resources :habits do
resources :levels do
resources :missed_dates, only: [:create, :new]
end
end
通常,当您创建嵌套对象时...您不会像这样创建它:
@missed_date = MissedDate.new(missed_date_params)
如果它嵌套在习惯下,则在关联对象上创建它。在这种情况下:
@missed_date = level.missed_dates.new(missed_date_params)
否则,您实际上根本没有设置 level_id。
如果必须同时属于习惯和级别,那么你需要确保另一个id在params中。
而不是 nil
它应该说它嵌套的 id:
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
.
用户在pages/home上点击此处:
<%= 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 %>
然后他被带到 missed_dates/new,在那里呈现 _form:
<%= 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 %>
MissedDatesController
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
路线
resources :habits do
resources :levels do
resources :missed_dates, only: [:create, :new]
end
end
通常,当您创建嵌套对象时...您不会像这样创建它:
@missed_date = MissedDate.new(missed_date_params)
如果它嵌套在习惯下,则在关联对象上创建它。在这种情况下:
@missed_date = level.missed_dates.new(missed_date_params)
否则,您实际上根本没有设置 level_id。
如果必须同时属于习惯和级别,那么你需要确保另一个id在params中。