2013-09-23 2 views
1

Я благодарен присутствующим экспертам?? Rails 4.0, подающая range_field, не обновляет параметры

Я пытаюсь использовать ползунки range_field для обновления некоторых параметров пользователя/целых чисел.
Когда я отправляю форму, обновление params временно в текстовом поле % = @ user.risk%> Я ухожу в сторону, но не сохраняю его в базе данных, когда я перезагружаю изменения. Я сильно рисую из учебника Rails 4.0 от Michael Hartl.

Ниже я первоначально использовал form_for (@user), но current_user, похоже, работает лучше всего. `

<%= form_for(current_user) do |f|%> 

     <%= f.range_field :risk, :in=>0..100, :id=>"slider1"%> 

     <%= f.range_field :tax, :in=>0..100, :id=>"slider2"%> 

     <%= f.range_field :income, :in=>0..100, :id=>"slider3"%> 

     <%= f.range_field :international, :in=>0..100,:id=>"slider4"%> 
     <%= f.submit "Save Profile" %> 
    <% end %>` 

class UsersController < ApplicationController 

def show 
    @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    end 

def create 
    @user = User.new(user_params) 
    if @user.save 
    sign_in @user 
    flash[:success] ="Welcome" 
    redirect_to @user 
    else 
    render 'new' 
    end 
    end 

    def edit 
    end 

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
    flash[:success] = "Profile Updated" 
    redirect_to @user 
    else render 'edit' 
    end 
    end 

private 

    def user_params 
     params.require(:user).permit(:name, :email, :password, 
:password_confirmation, :risk, :tax, :income, :international) 
    end 
end 

class User < ActiveRecord::Base 


before_save :set_default 
before_save { self.email = email.downcase } 
before_create :create_remember_token 
validates :name, presence: true, length: { maximum: 50 } 
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
validates :email, presence: true, format: { with: 
VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } 
has_secure_password 
validates :password, length: { minimum: 6 } 


def User.new_remember_token 
    SecureRandom.urlsafe_base64 
end 

def User.encrypt(token) 
    Digest::SHA1.hexdigest(token.to_s) 
end 

def set_default 
    self.risk = "50" 
    self.tax = "50" 
    self.income = "50" 
    self.international = "50" 
end 

    private 

    def create_remember_token 
    self.remember_token = User.encrypt(User.new_remember_token) 
    end 
end 

И выход на консоли, после того, как я пытаюсь обновить Params через range_field и вход User.find (4)

=> #<User id: 4, name: "Tony", email: "[email protected]", created_at: "2013-09-23 06:37:22", 
updated_at: "2013-09-23 06:37:23", password_digest: "...", remember_token: "...", 
risk: 50, tax: 50, income: 50, international: 50> 

Это выход из моей локальной WEBrick Rails сервера

Started PATCH "https://stackoverflow.com/users/1" for 127.0.0.1 at 2013-09-23 06:15:32 -0700 
Processing by UsersController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "user"=>{"risk"=>"70", "tax"=>"61", "income"=>"54", "international"=>"58"}, "commit"=>"Save Profile", "id"=>"1"} 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]] 
    (0.0ms) begin transaction 
    User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 1) LIMIT 1 
    (0.0ms) rollback transaction 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = '.....' LIMIT 1 
    (0.0ms) begin transaction 
    CACHE (0.0ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 1) LIMIT 1 
    (0.0ms) rollback transaction 
    Rendered users/edit.html.erb within layouts/application (1.9ms) 
    Rendered layouts/_header.html.erb (0.2ms) 
Completed 200 OK in 8ms (Views: 6.0ms | ActiveRecord: 0.3ms) 

Спасибо всем вам очень много

+0

I угадайте проблему с помощью метода 'before_save' и' set_default', который вы прямо присваиваете значения, такие как 'risk',' tax', 'income' и' in если вы обновляете параметры «params», которые не будут отражать объект, поскольку обратный вызов назначает статические значения. –

+0

Спасибо за помощь, я вижу, как это может вызвать проблему, это то, что я добавил при попытке решить проблему. Я удалил его, но проблема все еще сохраняется. – TlfT

ответ

0

Решение было простым

def update 
    @user = User.find(params[:id]) 
    @user.update_attributes!(user_params) 

.....

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