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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

499閲覧

Railsでフォームを共通の部分とページごとに拡張する部分に分けたい

ysmz

総合スコア31

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/08/29 06:08

編集2017/08/29 06:27

###前提・実現したいこと
Railsでページごとにフォームの内容を変更したいです。
現在はformの部分をpartialで切り出しています。
formオブジェクトが呼び出し元に渡せないため困っています。

###該当のソースコード
呼び出し元

edit.html.erb

ruby

1<% provide(:button_text, 'Save changes') %> 2 3# ここに試したことの内容を記述して試していました 4 5<h1>Update your profile</h1> 6<div class="row"> 7 <div class="col-md-6 col-md-offset-3"> 8 <%= render 'layouts/form' %> 9 10 <div class="gravatar_edit"> 11 <%= gravatar_for @user %> 12 <a href="http://gravatar.com/emails" target="_blank">Change</a> 13 </div> 14 </div> 15</div>

_form.html.erb

ruby

1<%= form_for(@user) do |f| %> 2 3 <%= f.label :name %> 4 <%= f.text_field :name, class: 'form-control' %> 5 6 <%= f.label :email %> 7 <%= f.email_field :email, class: 'form-control' %> 8 9 <%= f.label :password %> 10 <%= f.password_field :password, class: 'form-control' %> 11 12 <%= f.label :password_confirmation %> 13 <%= f.password_field :password_confirmation, class: 'form-control' %> 14 15 <% provide :form, f %> #試したこと2参照 16 <%= yield :extend_form %> #理想ではこのようにyieldを用いてformの内容を拡張したい 17 18 <%= f.submit yield(:button_text), class: "btn btn-primary" %> 19<% end %>

###試したこと
1 content_for を用いて引数が渡せないか試しました

<% content_for :extend_form f do %> <%= f.label :address %> <%= f.text_field :address, class: 'form-control' %> <% end %>

2 provideを用いて渡せるか試しました

<% content_for :extend_form do %> <% f = yield :form %> <%= f.label :address %> <%= f.text_field :address, class: 'form-control' %> <% end %>

###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.0.3

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

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

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

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

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

guest

回答2

0

ベストアンサー

例えばなんですが、
shared/_common_form.html.erb

<%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :email %> <%= f.email_field :email, 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' %>

edit.html.erb

<h1>Update your profile</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for @user do |f| %> <%= render 'shared/common_form', { f: f } %> # ここに共通ではないものを追加してあげる。 <%= f.submit yield(:button_text), class: "btn btn-primary" %> <% end %> <div class="gravatar_edit"> <%= gravatar_for @user %> <a href="http://gravatar.com/emails" target="_blank">Change</a> </div> </div> </div>

以上にしてみてはどうでしょうか?

投稿2017/08/29 09:03

Ryuto

総合スコア206

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

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

0

Railsでページごとにフォームの内容を変更したいです。
現在はformの部分をpartialで切り出しています。

わざわざpartialで分けないでページごとにフォームを入れていけばいいのではないでしょうか?

partialを使用する時って基本的に繰り返されるパーツをテンプレート化するためにあると思うのですが。。。

解決したいことが違っていたらすみません。。。。

投稿2017/08/29 07:30

Ryuto

総合スコア206

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

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

ysmz

2017/08/29 08:18 編集

ご回答ありがとうございます。 おっしゃる通りなのですが、 partialで書いているところはページごとに共通なので、何度も書きたくないという思いがありました・・・。
ysmz

2017/08/29 11:53

ありがとうございます。 上記のようにしてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問