こんにちは。現在f.collection_check_boxesについてのプログラムを行なっております。
f.collection_check_boxesで作成した内容を、確認のためhiddenに反映されるように構築したいのですが、反映されずに困っております。
f.collection_check_boxes以外は反映されている状態でもしお分かりでしたらご教示頂けないでしょうか?
よろしくお願い致します。
= form_for(@contact, url: { action: :confirm }) do |f| - if @contact.errors.any? strong 入力内容にエラーがあります ul - @contact.errors.each do |attr, msg| li= msg = f.collection_check_boxes :subsidy, Contact.SubsidyLists, :first, :second = f.submit "確認"
= form_for(@contact, url: { action: :thanks }) do |f| = f.hidden_field :subsidy = @contact.subsidy
@@SubsidyLists = [ ["1","1"], ["2","2"] ] def self.SubsidyLists @@SubsidyLists end
よろしくお願い致します。
controller
1 2class ContactController < ApplicationController 3 layout "app" 4 def index 5 @contact = Contact.new 6 render :action => 'index' 7 end 8 9 def confirm 10 @contact = Contact.new(contact_params) 11 if @contact.valid? 12 render :action => 'confirm' 13 else 14 render :action => 'index' 15 end 16 end 17 18 def thanks 19 @contact = Contact.new(contact_params) 20 ContactMailer.received_email(@contact).deliver 21 end 22 23 private 24 def contact_params 25 params.require(:contact).permit( 26 :subsidy 27 ) 28 end 29end
Contactのモデル定義はどのようになっていますか?
class Contact
include ActiveModel::Model
attr_accessor :company, :name, :tel, :email, :address, :subject, :employment, :emp_number, :social, :subsidy
@@SubsidyLists = [
["1","1"],
["2","2"]
]
def self.SubsidyLists
@@SubsidyLists
end
end
となっております!よろしくお願い致します。
「確認のためhiddenに反映」という部分の意味が少しわからないので確認なのですが、= f.hidden_field :subsidy という部分にデータを入れて画面上に表示させたいということでしょうか?
それと、controllerも質問文に掲載いただけると回答が付きやすくなると思います。
ご返答ありがとう御座います。
おっしゃる通りです。
controllerを追加しましたので、よろしければ確認下さいませ。
インデントは正しく取ってください。
コードはコードブロックの中に記述してください。
できればコードブロックに言語を指定してシンタックスハイライトをつけてください。
Mugheartさんの仰っているのはこういうことです↓(コメント欄ではなくて、これまでどおり質問文内に記載してもらって大丈夫です)
```ruby
# ファイル名
ソースコード
```
ご丁寧にありがとう御座います。上記のような形でよろしいでしょうか?
お手間おかけしました。
フォーム部分のコードのインデントは正しいですか?
いえいえ!
それと、hidden_fieldがあるファイルは、コントローラーのどのアクションによって表示されますか??
(インデントは間違っていそうではありますね( *¯ ꒳ ¯*;)
confirmとなります。
今binding.pryで色々確認していますが、
indexからconfirmに引き渡される時点でsubsidy=nilとなっているようです。
include ActiveModel::Modelではf.collection_check_boxesと親和性がないのでしょうか?
もう一度だけ質問しますね、フォーム部分のコードのインデントは正しいですか?
面倒くさいと思われているのかもしれませんが、Slimのコードはインデントによって入れ子構造を表現しているのでこの質問に答えていただけない限り回答できません。
先走って色々と試されているようですが、そもそもまずどんなフォームがhtmlで生成されているのか
Chromeのデベロッパーツールでも使って確かめた方がいいのではないでしょうか?
おそらくですが、この問題は f.collection_check_boxes も ActiveModel::Model も関係ない、slim の 記法と HTML レベルの話でしかないと思いますよ。
あなたの回答
tips
プレビュー