2015-02-25 1 views
0

Если пользователь проверяет флажок, как мы можем его сохранить?КАК СОХРАНИТЬ флажок и УВЕЛИЧИТЬ целое число для каждой галочки?

Прямо сейчас, если это произойдет, то галочка исчезает при освежающим и в индексе <%= 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:" %>&nbsp; 
 
    <%= 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 и т. Д., Пока он выполняет свою работу.

+0

Вы хотите добавить в булевскую колонку? Какова цель различных констант внутри, которые все одинаковы? – tadman

+0

@tadman Я хочу: пропущено, которое представляет собой целое число для представления 1, так что, когда пользователь нажимает на свой ящик, индекс будет складывать количество ящиков, которые будут отображаться, поэтому, представляя, сколько дней пользователь: пропустил –

+0

. Пока неясно, почему у вас так много констант с одинаковым содержимым и еще более озадачивающе, что все они содержат только значение '1', повторяющееся три раза без видимых причин. Имейте в виду, что столбцы не должны иметь '?' От их имени. Булевские столбцы не имеют этого в имени столбца, но удобный метод с '?' В конце создается автоматически. – tadman

ответ

0

Если вы хотите кучу флажков, просто сделать это:

<%- 5.times do |n| %-> 
    <%= f.label "Level #{n+1}:" %> 
    <%= check_box_tag 'missed[]', value: n+1 %> 
<%- end -%> 

Затем вы должны получить missed параметров с серией цифр в нем, каждый из которых соответствует, если в этот день был проверен или нет.Если вы хотите знать, сколько дней было пропущено:

[params[:missed]].flatten.length 

Это обрабатывает случай, когда params[:missed] не определен.

+0

Tadman Я думаю, что вы пропустили часть после просто так: ... И большое спасибо за вашу помощь! –

+0

О, это было там, просто невидимо. Ошибка форматирования кода. – tadman

+0

Спасибо! Я обновил код, но он все еще не сохраняется в _form. Есть идеи? –

Смежные вопросы