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

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

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

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

Q&A

解決済

1回答

269閲覧

Rails5で2つの入力欄の間に「ー」を入れたいのですが、上手く実装出来ないのでご教授お願いします。

koume

総合スコア458

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/06/19 03:56

Rails5で住所の入力フォームを作成しています。
フォームの表示自体は上手く出来ていますが、郵便番号の入力フォームを改良したいのですが
上手く実装出来ないのでご教授お願いいたします。
現状は[ ] [ ]このように入力欄が2つ並んだ状態です。
それを
[ ] - [ ]のように真ん中に 「-」をいれたいのですが、上手くいかないのです。
実装している現状のコードは以下になります。

app/views/admin/clients/_form.html.erb <%= markup do |m| p = ClientFormPresenter.new(f, self) m << p.notes p.with_options(required: true) do |q| m << q.postal_code_block(:postal_code1, :postal_code2, '郵便番号', size: 5) end m << p.check_boxes end %>
app/presenters/form_presentr.rb class FormPresenter include HtmlBuilder attr_reader :form_builder, :view_context delegate :label, :text_field, :password_field, :check_box, :radio_button, :text_area, :object, to: :form_builder def initialize(form_builder, view_context) @form_builder = form_builder @view_context = view_context end def notes markup(:div, class: 'notes') do |m| m.span '*', class: 'mark' m.text '印の付いた項目は入力必須です。' end end def text_field_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << text_field(name, options) end end def password_field_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << password_field(name, options) end end def date_field_block(name, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name, label_text, options) m << text_field(name, options) end end private def decorated_label(name, label_text, options = {}) label(name, label_text, class: options[:required] ? 'required' : nil) end end
app/presenters/client_form_presenter.rb class ClientFormPresenter < FormPresenter def postal_code_block(name1, name2, label_text, options = {}) markup(:div, class: 'input-block') do |m| m << decorated_label(name1, label_text, options) m << text_field(name1, options) m << text_field(name2, options) end end end

以下のようにいろいろためしてみましたが上手くいきませんでした。

m << q.postal_code_block((:postal_code1), - (:postal_code2), '郵便番号', size: 5) m << q.postal_code_block([:postal_code1], - [:postal_code2], '郵便番号', size: 5) m << q.postal_code_block([:postal_code1], [-], [:postal_code2], '郵便番号', size: 5)

どなたかご教授いただけないでしょうか?
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

なんかややこしいことしてるので、あまりコードを読みきってないですが...

rb

1def postal_code_block(name1, name2, label_text, options = {}) 2 markup(:div, class: 'input-block') do |m| 3 m << decorated_label(name1, label_text, options) 4 m << text_field(name1, options) 5 m << # ここにHTMLで「-」を生成するコードを突っ込んでしまえばいいのでは? 6 m << text_field(name2, options) 7 end 8end

と思ったんですがどうでしょうか。

蛇足ですが、そもそもデフォルトのヘルパー以外のRubyで
HTMLコードを生成するのにはあまり賛同できなくて、
例えば今回の件もそうですが、
素直にhtml.erbで書いてればtext_fieldの間に'-'を入れるだけで済む話ですし、
もし今後フォームに変更があった場合html.erbファイルからrubyのメソッドを追って、
さらにそこから動的に作られているフォームを読み解き、Rubyの世界で修正しなければいけません。
僕はそういう意味でそこまでのやる気はないので今回はコードを読み切ってませんが
特に理由がないのであれば個人的にはオススメしません...。

投稿2019/06/19 04:32

編集2019/06/19 04:36
Mugheart

総合スコア2344

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

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

koume

2019/06/21 00:06

回答ありがとうございます。参考書などを参考にして進めていましたが、Mughheartさんのおっしゃる通り シンプルに考えて進めることにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問