質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

521閲覧

rails で都道府県フォームの作成(jp_prefecture jpostal.jp)

sk2938

総合スコア21

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/10/03 03:56

編集2018/10/03 04:23

rails で都道府県フォームを作成しているのですが、エラーが出てきてしまいました。エラーは都道府県フォームに何も入れずに登録しようとしたら出てしまいました。名前、メールアドレス、パスワード、パスワード確認には情報を入れないと登録できないが年齢、性別、郵便番号、都道府県、市町村には情報を入れなくても登録できるようにしたいです。

エラー内容
undefined method `code' for nil:NilClass
Extracted source (around line #102):

101 def prefecture_name=(prefecture_name)
102 self.prefecture_code = JpPrefecture::Prefecture.find(name: prefecture_name).code
103 end

new.html.erb

<% provide(:title, "アカウント作成") %> <h1>アカウント作成</h1> <div class = "row"> <div class = "col-md-6 col-md-offset-3"> <%= form_for @user do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :name, "名前" %> <%= f.text_field :name, class: "form-control" %> <%= f.label :email, "メールアドレス" %> <%= f.email_field :email, class: "form-control" %> <%= f.label :age, '年齢' %> <%= f.select :age, ["10代", "20代", "30代", "40代", "50代"], {:prompt => true}, class: 'form-control' %> <%= f.label :gender, '性別'%> <%= f.select :gender, ["男性", "女性"], {:prompt => true}, class: 'form-control' %> <%= f.label :postcode, '郵便番号' %> <%= f.text_field :postcode, class: 'form-control' %> <%= f.label :prefecture_name, '都道府県' %> <%= f.collection_select :prefecture_name, JpPrefecture::Prefecture.all,:name, :name, {:prompt => true}, class: 'form-control' %> <%= f.label :address_city, '市町村' %> <%= f.text_field :address_city, class: 'form-control' %> <%= f.label :password, "パスワード" %> <%= f.password_field :password, class: "form-control" %> <%= f.label :password_confirmation, "パスワード確認" %> <%= f.password_field :password_confirmation, class: "form-control" %> <%= f.submit '登録', class: "square_btn" %> <% end %> </div> </div>

user.rb

class User < ApplicationRecord include JpPrefecture jp_prefecture :prefecture_code has_many :microposts, dependent: :destroy has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :followers, through: :passive_relationships, source: :follower attr_accessor :remember_token, :activation_token, :reset_token before_save :downcase_email before_create :create_activation_digest before_save {self.email = email.downcase} validates :name, presence: true, length: {maximum: 50} validates :email, presence: true, length: {maximum: 200}, format: { with: VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i }, uniqueness: { case_sensitive: false } has_secure_password validates :password, presence: true, length: {minimum: 6}, allow_nil: true #渡された文字列のハッシュ値を返す def User.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end #ランダムなトークンを返す def User.new_token SecureRandom.urlsafe_base64 end #remem_digestにremember_tokenのハッシュ化されたものを入れる def remember self.remember_token = User.new_token update_attribute(:remember_digest, User.digest(remember_token)) end # トークンがダイジェストと一致したらtrueを返す def authenticated?(attribute, token) digest = send("#{attribute}_digest") return false if digest.nil? BCrypt::Password.new(digest).is_password?(token) end #ユーザーのログイン情報を破棄する def forget update_attribute(:remember_digest, nil) end # アカウントを有効にする def activate update_attribute(:activated, true) update_attribute(:activated_at, Time.zone.now) end # 有効化用のメールを送信する def send_activation_email UserMailer.account_activation(self).deliver_now end #パスワード再設定の属性を設定する def create_reset_digest self.reset_token = User.new_token update_attribute(:reset_digest, User.digest(reset_token)) update_attribute(:reset_sent_at, Time.zone.now) end #パスワード再設定のメールを送信する def send_password_reset_email UserMailer.password_reset(self).deliver_now end #パスワード再設定の期限が切れている場合はtrueを返す def password_reset_expired? reset_sent_at < 2.hours.ago end def feed Micropost.where("user_id = ?", id) end #ユーザーをフォローする def follow(other_user) following << other_user end #ユーザーをフォロー解除する def unfollow(other_user) active_relationships.find_by(followed_id: other_user.id).destroy end #フォローしていたらtrueを返す def following?(other_user) following.include?(other_user) end #都道府県 def prefecture_name JpPrefecture::Prefecture.find(code: prefecture_code).try(:name) end #都道府県 def prefecture_name=(prefecture_name) self.prefecture_code = JpPrefecture::Prefecture.find(name: prefecture_name).code end private # メールアドレスをすべて小文字にする def downcase_email self.email = email.downcase end # 有効化トークンとダイジェストを作成および代入する def create_activation_digest self.activation_token = User.new_token self.activation_digest = User.digest(activation_token) end end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ActiveRecord::Baseを使っていませんでした。

投稿2018/10/04 04:31

sk2938

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問