2016-09-18 2 views
0

Ich versuche, Zeit der Profilaktualisierung zu speichern umgewandelt Anzahl an integer, wenn verboten Option aktiviert ist, aber wenn ich auf dem Datenbankfeld suchen, ban_time ist gleich Null.kann nicht aktuelle Zeit in Rails Modell speichern

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 

Alles andere ist korrekt gespeichert.

Update: Hier sind Schema und Modell für Benutzer.

Schema

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 

Modell

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 

Formular

<%= 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

Können Sie Modell und Schema für Benutzer anzeigen? –

+0

@JohnFeltz Frage ist aktualisiert. – Nikola

+0

Danke. Setzen Sie einen Debug-Punkt und überprüfen Sie, ob der Params-Hash korrekt ist. –

Antwort

2
 <%= f.check_box :banned %> 

... wird '0' zurück, wenn false oder '1', wenn true

Und kein params[:banned] ist es params[:user][:banned] oder user_params[:banned]

ist so

ändern
if !params[:banned].nil? 

in

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

Danke! Ich habe in einem Post hier auf SO gesehen, dass unkontrollierte Checkboxen nicht einmal gesendet werden (aber ich merkte, dass es falsch ist, als ich die Ausgabe der Anfrage sah), also dachte ich, dass die Suche nach Nil die Arbeit machen würde. – Nikola