【发布时间】:2015-08-31 00:30:33
【问题描述】:
用户有很多好习惯。如果有一天他错过了他的习惯,那么他应该点击这里:
习惯/_habit.html.erb
<%= link_to new_habit_level_days_missed_path({ habit_id: habit, level_id: habit.current_habit_level.id }), id: 'remove_check' do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
然后他被重定向到:
views/days_missed/new.html.erb
<%= simple_form_for(@habit) do |f| %>
<%= f.date_field :missed_days_date %>
<%= link_to 'Submit'.html_safe, habit_level_days_missed_index_path({ habit_id: @habit, level_id: @habit.current_habit_level.id }), remote: true, method: 'post', data: { modal: true }, class: 'remove-check', id: 'remove_check' %>
<% end %>
点击Submit 后,会向DaysMissedController 的创建操作发出POST 请求,这将使missed_days 增加+1。
class DaysMissedController < ApplicationController
def 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
end
我们如何将date_field 条目与missed_days 的每个增量相关联?换句话说,对于每一个错过的日子,都应该有一个错过的日期。
这样,除了显示用户错过了多少天之外,我们还将显示用户错过了哪些天。
数据库
create_table "habits", force: true do |t|
t.integer "missed_days", default: 0
t.boolean "conceal", default: false
t.integer "likes"
t.datetime "date_started"
t.string "trigger"
t.string "action"
t.string "target"
t.string "reward"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "order"
t.datetime "completed_at"
t.text "committed", default: "---\n- sun\n- mon\n- tue\n- wed\n- thu\n- fri\n- sat\n"
end
add_index "habits", ["user_id", "created_at"], name: "index_habits_on_user_id_and_created_at", using: :btree
add_index "habits", ["user_id"], name: "index_habits_on_user_id", using: :btree
create_table "levels", force: true do |t|
t.integer "habit_id"
t.integer "missed_days", default: 0
t.datetime "missed_days_date" # How should we integrate this?
t.integer "days_lost", default: 0
t.integer "current_level"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
路线
resources :habits do
resources :levels do
# This route increments and decrements missed days
resources :days_missed, only: [:create, :destroy, :new]
end
end
这是它的gist。
感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails ruby model-view-controller