2016-06-05 3 views
1

Rails 5.0.0.rc1Downcase перед сохранением равна нулю является Rails

Я хочу иметь username к downcase перед сохранением в рельсах 5.0.0.rc1, но некоторые, как username является nil:

user.rb:

before_save :downcase_username 

def downcase_username 
    self.username.downcase! 
end 

Html:

<form action="/users" method="post"> 
    <input type="text" name="user[username]" id="user_username" /> 
</form> 

не определено метод `downcase! ' for nil: NilClass

Я использую React, и я могу создать пользователя с именем пользователя без проблем. Я мог бы установить username на toLowerCase, но я не хочу этого делать.

Почему имя пользователя равно нулю?

Edit (.jsx):

handleName: function(e){ 
    this.setState({name: e.target.value}); 
} 

<form action="/users" method="post"> 
    <input type="text" name="user[username]" id="user_username" 
    value={this.state.name} onChange={this.handleName} placeholder="username" /> 
    <button className="button small radius" type="submit">Register</button> 
</form> 

Разрабатывают Контроллер:

def create 
    super do |resource| 
     resource.user[username] = params[:username] 
     resource.registration_id = params[:registration_id] 
     resource.save! 
    end 
    end 

Журналы:

Processing by Users::RegistrationsController#create as HTML 
    Parameters: {"user"=>{"username"=>"Test", "email"=>"[email protected]", "password"=>"[FILTERED]"}, "registration_id"=>"2"} 
Unpermitted parameter: username 
    (0.2ms) BEGIN 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]] 
    (0.1ms) ROLLBACK 
Completed 500 Internal Server Error in 159ms (ActiveRecord: 0.7ms) 

Журналы 2: # Теперь данные сохраняются, но по-прежнему получать downcase равна нулю

Started POST "/users" for ::1 at 2016-06-05 17:18:10 +0100 
Processing by Users::RegistrationsController#create as HTML 
    Parameters: {"user"=>{"username"=>"Foo", "email"=>"[email protected]", "password"=>"[FILTERED]"}, "registration_id"=>"2"} 
    (0.1ms) BEGIN 
    User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]] 
    SQL (1.1ms) INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "username") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["email", "[email protected]"], ["encrypted_password", "$2a$11$TrrnP4391MeEMvn8e2JwMesU5JS0vGELx0.8eUVO.B4sDPZVdUFMy"], ["created_at", 2016-06-05 16:18:10 UTC], ["updated_at", 2016-06-05 16:18:10 UTC], ["username", "foo"]] 
    (0.9ms) COMMIT 
    (0.1ms) BEGIN 
    (0.1ms) ROLLBACK 
Completed 500 Internal Server Error in 168ms (ActiveRecord: 5.5ms) 
+0

@ 7urkm3n Пробовал, но это то же самое – Sylar

+0

Вы можете избежать этого исключения, убедившись, что атрибут присутствует: 'self.username.downcase! если username.present? 'Но это не решит проблему, что атрибут не задан в первую очередь. Чтобы помочь вам в этом, нам нужна дополнительная информация. Можете ли вы отправить сообщение: вы просматриваете, код для отправки формы, параметры, полученные приложением и вашим контроллером? – spickermann

+0

@ 7urkm3n То же самое. Я обновляю сообщение своим фактическим кодом. – Sylar

ответ

0

application_controller.rb

class ApplicationController < ActionController::Base 

protected 
     def configure_permitted_parameters 
     # from new devise -v 4.1.1 gem 
     # devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
     # devise_parameter_sanitizer.permit(:account_update, keys: [:username]) 

     #older version 
     devise_parameter_sanitizer.for(:sign_up) << [:username] 
     devise_parameter_sanitizer.for(:account_update) << [:username] 
     end 
end 
+1

Im on Rails 5.0.0.rc1 и та же ошибка. Но теперь ... это экономит! А? Почему ошибка? – Sylar

+0

какая ошибка снова? – 7urkm3n

+0

Та же ошибка для этого сообщения. – Sylar

1

метод Update, чтобы в соответствии с ниже: -

Защиту downcase_username

self.usernname = self.username.try (: downcase)

конец

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