2016-09-18 1 views
0

Я пытаюсь сэкономить время обновления профиля преобразуется в целое число, когда запрещено опция включена, но всякий раз, когда я смотрю на поле базы данных, ban_time равна нулю.Не удалось сохранить текущее время в модели Rails

def update 
    find_user 

    if !params[:banned].nil? 
     @user.ban_time = Time.now.to_i 
     @user.save 
    end 

    if @user.update(user_params) 
     redirect_to @user, notice: "Profil je uspešno ažuriran." 
    else 
     render "edit" 
    end 
end 

Все остальное сохранено правильно.

Обновить: Вот модель и модель для пользователя.

Схема

create_table "users", force: :cascade do |t| 
    t.string "username" 
    t.string "email" 
    t.string "password_digest" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    t.string "location" 
    t.date  "birthdate" 
    t.string "rank" 
    t.boolean "banned" 
    t.text  "bandesc" 
    t.boolean "vip" 
    t.integer "ban_time" 
    t.integer "ban_remaining_days" 
    t.integer "bug_report_time" 
    end 

Модель

class User < ApplicationRecord 

    has_secure_password 

    validates :username, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9]+\Z/}, 
          length: { maximum: 10, minimum: 4 } 
    validates :email, presence: true, uniqueness: true, length: { maximum: 50 } 
    validates :password, presence: true, length: { maximum: 50, minimum: 4 }, if: :should_validate_pass? 
    validates :password_confirmation, presence: true, if: :should_validate_conf? 
    validates :location, presence: true, length: { maximum: 30 } 
    validates :banned, presence: true, if: :ban_remaining_days? 
    validates :ban_remaining_days, presence: true, numericality: { only_integer: true }, inclusion: { in: 1..365 }, if: :banned? 
    validates :bandesc, presence: true, length: { maximum: 200, minimum: 20 }, if: :banned? 

    def should_validate_pass? 
     new_record? || password.present? 
    end 

    def should_validate_conf? 
     new_record? || password_confirmation.present? 
    end 

end 

Форма

<%= form_for @user do |f| %> 
    <% if @user.errors.any? %> 
     <div class="alert alert-danger"> 
      <ul> 
       <% @user.errors.full_messages.each do |m| %> 
        <li><%= m %></li> 
       <% end %> 
      </ul> 
     </div> 
    <% end %> 

    <div class="field"> 
     <%= f.label "Korisničko ime:" %> 
     <%= f.text_field :username, class: "form-control" %> 
    </div> 

    <div class="field"> 
     <%= f.label "Lokacija:" %> 
     <%= f.text_field :location, class: "form-control" %> 
    </div> 

    <div class="field"> 
     <%= f.label "Datum rođenja:" %><br/> 
     <%= f.date_select :birthdate, order: [:day, :month, :year], start_year: 1900, end_year: Time.now.year - 18 %> 
    </div> 

    <div class="field"> 
     <%= f.label "E-mail:" %> 
     <%= f.text_field :email, class: "form-control" %> 
    </div> 

    <div class="field"> 
     <%= f.label "Lozinka:" %> 
     <%= f.password_field :password, class: "form-control" %> 
    </div> 

    <div class="field"> 
     <%= f.label "Potvrda lozinke:" %> 
     <%= f.password_field :password_confirmation, class: "form-control" %> 
    </div> 

     <h3>Administratorska podešavanja</h3> 

     <div class="field"> 
      <%= f.label "Rank:" %> 
      <%= f.text_field :rank, class: "form-control" %> 
     </div> 

     <div class="field"> 
      <%= f.label "VIP:" %> 
      <%= f.check_box :vip %> 
     </div> 

     <div class="field"> 
      <%= f.label "Banovanje člana:" %> 
      <%= f.check_box :banned %> 
     </div> 

     <div class="field"> 
      <%= f.label "Razlog:" %> 
      <%= f.text_area :bandesc, class: "form-control" %> 
     </div> 

     <div class="field"> 
      <%= f.label "Vremenski period (dana):" %> 
      <%= f.text_field :ban_remaining_days, class: "form-control" %> 
     </div> 

    <div class="submit"> 
     <%= f.submit button_text, class: "btn btn-primary" %> 
    </div> 

<% end %> 
+0

Можете ли вы показать модель и схему для пользователя? –

+0

@JohnFeltz Вопрос обновлен. – Nikola

+0

Спасибо. Поместите точку отладки и убедитесь, что хеш params правильный. –

ответ

2
 <%= f.check_box :banned %> 

... возвращать '0', если false или '1', если true

И нет params[:banned] это params[:user][:banned] или user_params[:banned]

Меняем

if !params[:banned].nil? 

в

if user_params[:banned] == '0' 
+0

Спасибо! Я видел в одном сообщении здесь, на SO, что снятые флажки не были отправлены (но поняли, что это неправильно, когда я увидел вывод запроса), поэтому я подумал, что проверка на nil будет выполнять эту работу. – Nikola

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