前提・実現したいこと
Railsアプリケーション作成中。
やりたいことはタイトルそのままです。
Ruby 2.4.5
Rails 4.2.8
Gem: friendly_urlを使用
いろいろ検索してみたのですが、期待する記事を見つけることができなかったのでこちらでヒントをいただけると嬉しいです。
(追記)
Twitterの@以下が一意制約で固有のものであるのや、質問箱でオリジナルのURLを設定できるのと同じような実装を考えています。
期待する動作は以下の通りです。
- ユーザー情報編集画面でユーザーがオリジナルのfriendly_urlを設定
- すでに取得されている場合、入力と同時にAjaxでアラートを表示
モデル側に一意制約(ユニーク制約)バリデーションを設定しているのですが、入力し送信する前にアラートを出したいです。
このアラートは、ヘッダー部分に表示されるものではなく、入力フォームの下に赤文字で表示されるようなイメージです。
というのも、編集画面をモーダルで行なっているため、送信ボタン押下後のアラート表示の方が難しいのではと思うからです。
もしこちらの方がかんたんにできそうということであればご教授いただけると嬉しいです。
該当のソースコード
モデルでuniqueness: trueの設定をしています。
モデル
user.rb
ruby
1 2 #friendly_url 3 include FriendlyId 4 friendly_id :friendly_url 5 6 validates :friendly_url, length: { in: 3..20 }, 7 uniqueness: true, #一意性 8 format: { with: /\A[\w@-]*[A-Za-z][\w@-]*\z/ }, 9 # on: :friendly_url_user #登録時に入力必要なし 10 allow_nil: true #無入力許可
ユーザー情報編集画面のモーダル上にあるフォームです。
edit.html.erb
ruby
1<%= form_for @user do |f| %> 2 <div class="modal-body"> 3 <label> 4 <span>アイコン画像 5 <%= f.file_field :avatar ,:style=>"display:none;" , id: 'avatar_img' %> 6 </span> 7 <div > 8 <img src="#"/> 9 <%= image_tag(@user.avatar(:medium), :size => "70x70") %> 10 </div> 11 </label> 12 <ul> 13 <li> ユーザー名<%= f.text_field :nickname, placeholder: "ニックネーム(必須)",:required => true %></li> 14 <li> URL (3~20文字英数字)><%= f.text_field :friendly_url, placeholder: "URLを設定(英数字3-20文字)(必須)", :required => true %></li> 15 <!--ここにエラーメッセージをAjaxで表示したい--> 16 </ul> 17 </div> 18 <div class="modal-footer"> 19 <%= f.submit "完了", class: "btn" %> 20 </div> 21 <% end %> 22
試したこと
javascriptの知識が薄いのと、入力と同時にDBから情報をとってきて一意制約を確認するというフローをどう実装するのかイメージできていません。
また参考になりそうなサイトや記事などあれば教えていただけると嬉しいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー