Help us understand the problem. What is going on with this article?

【Rails】ユーザー登録機能が動作しない

開始タグ

ユーザー登録実装中に、データベースに登録できなくて詰まったのでメモ。

道中

色々な参考サイトを探してみるも明確な答えにたどり着けず、とりあえず「ry-byebug」のgemでデバッグして見た。

  def create
    @user = User.new(name: params[:name], pass: params[:pass])
    @user.save
    binding.pry
    redirect_to("/dashboard/index")
  end

すると以下のエラーが。

Started POST "/users/create" for 172.21.0.1 at 2019-10-20 13:31:02 +0000
Cannot render console from 172.21.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"AGAzaEa5VNEyv9sRn/kzQORFEDBs8CsBuxAPeH+7xB8ZM/qOfevgOKQLlmJH4mAHaDb6XEWhPWh2zHFPsMuVhA==", "name"=>"usertest", "pass"=>"passtest"}
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)



ActiveModel::UnknownAttributeError (unknown attribute 'username' for User.):

app/controllers/users_controller.rb:9:in `create'

usernameなんてないはずなのだが・・・と思い調べてみると、同じような現象が起きている方の投稿を発見。

ActiveModel::UnknownAttributeErrorの意味|teratail

もう一度db:migrateを行えば解決したようですので、試してみる。
※Dockerを使用しています。

docker-compose run web bundle exec rake db:migrate

再度登録作業を行ったら、無事データベースに登録されました。

試しにフォームのinputのname属性を変更して再度登録してみました。

user→username
pass→password

<%= form_tag("/users/create") do %>
  <input type="text" name="username" placeholder="ユーザーネーム" class="form_inp inp_text">
  <input type="text" name="password" placeholder="パスワード" class="form_inp inp_text">
  <div class="btn_area">
    <input type="submit" value="登録する" class="btn btn01 darkblue">
    <!-- /btn_area -->
  </div>
<% end %>

すると再度エラーが出ました。
そこでもう一度db:migrateすると、無事登録できるようになりました。

なるほど、そういえばname属性をusernameに変更していたな・・・。
一度送信を行ったあと(失敗しても)にinputのname属性を変更してしまうとエラーになってしまうようで、「name属性を変更してしまったこと」が原因だった。

閉じタグ

今後、name属性の変更はなるべく行わないようにしよう。
データベースへの登録に困った際は「db:migrate」を試してみよう。
時間かかってしもうた・・・。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした