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)
@ 7urkm3n Пробовал, но это то же самое – Sylar
Вы можете избежать этого исключения, убедившись, что атрибут присутствует: 'self.username.downcase! если username.present? 'Но это не решит проблему, что атрибут не задан в первую очередь. Чтобы помочь вам в этом, нам нужна дополнительная информация. Можете ли вы отправить сообщение: вы просматриваете, код для отправки формы, параметры, полученные приложением и вашим контроллером? – spickermann
@ 7urkm3n То же самое. Я обновляю сообщение своим фактическим кодом. – Sylar