Если пользователь проверяет флажок, как мы можем его сохранить?КАК СОХРАНИТЬ флажок и УВЕЛИЧИТЬ целое число для каждой галочки?
Прямо сейчас, если это произойдет, то галочка исчезает при освежающим и в индексе <%= habit.missed %>
он все еще показывает 0
вместо 1
(я не знаю, если истинным или ложным булево будет работать для этого).
Есть 15 флажков, для каждого окна пользователь проверяет, как мы можем добавить +1 к t.integer :missed
?
Другими словами, флажки будут представлять собой 1, если щелкнуть, и 0, если не нажать.
РАСПОЛ LOOK EX
Missed:
Level 1: [ ] [ ] [ ]
Level 2: [√] [√] [ ]
Level 3: [√] [ ] [ ]
Level 4: [√] [√] [√] [ ]
Level 5: [ ] [ ] [ ]
END ЗАДАЧА
+1 затем добавить 1 день в :level
, так как вы не будет засчитываться в день завершенным, если вы не сделали этого. Как мы можем для каждого окна добавить +1 к :level
?
В примере выше Пользователю будет нужно 2 дополнительных дней, прежде чем он сможет перейти на уровень 3, один дополнительный день, прежде чем он сможет перейти на уровень 4 и т.д.
И если вы пропустите три дня в как мы можем заставить пользователя вернуться к перезапуску этого уровня? Ex, если я нахожусь на 66-й день и проверил :missed
три раза в строке уровня 4, как показано выше, как мы можем пересчитать этот день, чтобы быть снова 45?
На этом этапе для Уровня 4 дополнительное окно должно появиться после каждой отметки через AJAX в случае, если на его втором ходу он пропустит день. Мы могли бы просто обновить коробки, показанные на этом уровне, которые я не думаю, потому что нам все равно понадобится подсчитывать, сколько дней он ушел.
class Habit < ActiveRecord::Base
belongs_to :user
before_save :set_level
acts_as_taggable
serialize :committed, Array
scope :missed, -> { where(missed: 1) }
def levels
\t \t committed_wdays = committed.map { |day| Date::DAYNAMES.index(day.titleize) }
\t \t n_days = ((date_started.to_date)..Date.today).count { |date| committed_wdays.include? date.wday }
case n_days \t
when 0..9
1
when 10..24
2
when 25..44
3
when 45..69
4
when 70..99
5
else
"Mastery"
\t end
end
protected
def set_level
self.level = levels
end \t
end
end
<%= simple_form_for(@habit) do |f| %>
<%= f.error_notification %>
<div class="america">
<form>
<div class="committed">
<%= f.label "Committed to:" %>
<%= f.collection_check_boxes :committed, Date::DAYNAMES, :downcase, :to_s %>
</div>
<p><div class="date-group">
<label> Started: </label>
<%= f.date_select :date_started, :order => [:month, :day, :year], class: 'date-select' %>
</div></p>
<p><%= f.text_field :trigger, class: 'form-control', placeholder: 'Enter Trigger' %></p>
<p><%= f.text_field :tag_list, habit: @habit.tag_list.to_s.titleize, class: 'form-control', placeholder: 'Enter Action' %></p>
<p><%= f.text_field :target, class: 'form-control', placeholder: 'Enter Target' %></p>
<p><%= f.text_field :positive, class: 'form-control', placeholder: 'Enter Reward' %></p>
<%= f.text_field :negative, class: 'form-control', placeholder: 'Enter Penalty' %>
<% 5.times do |n| %>
<%= f.label "Level #{n+1}:" %>
<%= check_box_tag 'missed[]', value: n+1 %>
<% end %>
<div class="america2">
<%= button_tag(type: 'submit', class: "btn") do %>
<span class="glyphicon glyphicon-plus"></span>
<% end %>
<%= link_to habits_path, class: 'btn' do %>
<span class="glyphicon glyphicon-chevron-left"></span>
<% end %>
<%= link_to @habit, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn' do %>
<span class="glyphicon glyphicon-trash"></span>
<% end %>
</div>
</form>
</div>
<% end %>
class HabitsController < ApplicationController
before_action :set_habit, only: [:show, :edit, :update, :destroy]
before_action :logged_in_user, only: [:create, :destroy]
def index
if params[:tag]
@habits = Habit.tagged_with(params[:tag])
else
@habits = Habit.all.order("date_started DESC")
@habits = current_user.habits
end
end
def show
end
def new
@habit = current_user.habits.build
end
def edit
end
def create
@habit = current_user.habits.build(habit_params)
if @habit.save
redirect_to @habit, notice: 'Habit was successfully created.'
else
@feed_items = []
render 'pages/home'
end
end
def update
if @habit.update(habit_params)
redirect_to @habit, notice: 'Habit was successfully updated.'
else
render action: 'edit'
end
end
def destroy
@habit.destroy
redirect_to habits_url
end
private
def set_habit
@habit = Habit.find(params[:id])
end
def correct_user
@habit = current_user.habits.find_by(id: params[:id])
redirect_to habits_path, notice: "Not authorized to edit this habit" if @habit.nil?
end
def habit_params
params.require(:habit).permit(:missed, :left, :level, :date_started, :trigger, :target, :positive, :negative, :tag_list, :committed => [])
end
end
Спасибо у ou =]
P.S. Открывайте для использования флажков выбора, флажков, collection_boxes и т. Д., Пока он выполняет свою работу.
Вы хотите добавить в булевскую колонку? Какова цель различных констант внутри, которые все одинаковы? – tadman
@tadman Я хочу: пропущено, которое представляет собой целое число для представления 1, так что, когда пользователь нажимает на свой ящик, индекс будет складывать количество ящиков, которые будут отображаться, поэтому, представляя, сколько дней пользователь: пропустил –
. Пока неясно, почему у вас так много констант с одинаковым содержимым и еще более озадачивающе, что все они содержат только значение '1', повторяющееся три раза без видимых причин. Имейте в виду, что столбцы не должны иметь '?' От их имени. Булевские столбцы не имеют этого в имени столбца, но удобный метод с '?' В конце создается автоматически. – tadman