私はRails 3.2.22.5レガシーアプリケーションを維持しており、メッセージをユーザーに内部的に送信するフォームを作成しています(この場合メディックスと呼ばれています)。私のフォームが現在どのように見えるのですか?Railsフォームチェックボックスまたは複数の配列の配列値を選択
<%= form_for(@mass_message, url: '/mass_messaging', method: 'post') do |f| %>
<%= f.text_field :subject, placeholder: "Subject" %>
<%= f.text_area :body, placeholder: "Body of message"%>
<%= f.label :medic %>
<%= f.select(:medic_ids, medic_select, {}, {:multiple => true, :class => 'select'}) %>
<%= f.button "Submit" %>
<% end %>
これは正常に動作しますが、私は、オブジェクトの配列にmedic_ids
division
列によってメディックスのグループをシャベルできるようにしたいと思います。コンソールから
m = MassMessage.new
m.medic_ids = Medic.where(division: "Dallas").map {|medic| medic.id}
m.save
それは、where句からマッピングされているIDを取得し、適切にmedic_ids
配列にそれらを注入し、結合テーブル内のレコードを作成しますMassMessageMedic
と呼ばれます正しく。
しかし、この形で、私はその4だから、この2つの部分の質問は本当に
1である別の部門を選択する形で、セレクタ、あるいはチェックボックスのいくつかの並べ替えを作成する機能が必要です。 )これら四つの文を考える(部門)
Medic.where(division: "Dallas").map {|medic| medic.id}
Medic.where(division: "Houston").map {|medic| medic.id}
Medic.where(division: "Beaumont").map {|medic| medic.id}
Medic.where(division: "Texoma").map {|medic| medic.id}
はどうすれば各アレイは(1または複数)を選択し、medic_ids
配列内に注入することができるようになるヘルパーメソッドのいくつかの並べ替えにこれらを構築することができますか?私は別のものを試しているとmedic_select
と呼ばれるヘルパーメソッドを考えて答えているかもしれませんが、私は誤っていない場合は、本質的に配列の配列になりますこのセレクターを作成する方法と壁を打っています。
2.)上記の配列が与えられた場合、フォームのセレクタの代わりに、check_box
を使用して、チェックボックスがクリックされたときに適切な医師が除算で選択されるように定義することができます。ここに私が試した例ですが、私はエラーを受けている:私は受信
<%= f.label :houston %>
<%= f.check_box :medic_ids, Medic.where(division: "Houston").map {|medic| medic.id} %>
<%= f.label :dallas %>
<%= f.check_box :medic_ids, Medic.where(division: "Dallas").map {|medic| medic.id} %>
エラーは次のとおりです。 undefined method
マージ」#のために `このようにそれをやろうとしたとき。
私はこれを行うことができると確信していますが、1時間の検索とさまざまなことを試してから、私は始めたときよりもそれほど長くはありません。
私は、誰かが私にこの方向へ正しい方向を向けることを期待しています。
それまでの間、私はGoogleに続き、Stackを研究して、他の誰かが同様の問題を抱えているかどうかを確認します。
私のコードおよび/または質問が簡潔で明瞭でない場合は、教えてください。私は編集します。
更新
私はform_for
には限界があり、私は、コントローラ内のparamsで仕事ができるようにform_tag
に切り替えることを決めたことを実現しています。ここで私のコードはどのように見えるのですか?
mass_messaging_controller.rb
def create
@mass_message = current_user.mass_messages.new
@mass_message.subject = params[:subject]
@mass_message.body = params[:body]
@mass_message.medic_ids = params[:medic_ids]
if @mass_message.save
redirect_to mass_messaging_index_path, notice: "Your message has been queued for processing"
else
Rails.logger.info(@mass_message.errors.inspect)
redirect_to mass_messaging_index_path, notice: "Your messasge failed to send"
end
end
form.html。ERB
<%= form_tag('/mass_messaging', :method=>'post') do %>
<p>
Subject:<br />
<%= text_field_tag "subject" %>
</p>
<p>
Body:<br />
<%= text_area_tag "body", "", :size=>"50x20" %>
</p>
<p>
Divison: <br />
<%= select_tag("medic_ids", options_for_select([['Houston', houston],
['Dallas', dallas], ['Beumont', beaumont], ['Texoma', texoma]])) %>
</p>
<p>
<%= submit_tag 'Submit' %>
</p>
<% end %>
mass_messaging_helper
def houston
Medic.where(division: "Houston").map {|medic| medic.id}
end
def dallas
Medic.where(division: "Dallas").map {|medic| medic.id}
end
def texoma
Medic.where(division: "Texoma").map {|medic| medic.id}
end
def beaumont
Medic.where(division: "Beaumont").map {|medic| medic.id}
end
私はそれがこの例のように、適切のparamsを渡すフォームを送信しますが、私は例外を発生させる。ここでdevelopment.log
からの抜粋ですStarted POST "/mass_messaging" for 127.0.0.1 at 2017-01-07 12:31:47 -0600
Processing by MassMessagingController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MVfjUe901TYuXbwDgMWSzCsf9T7KI7UvzKkiYEKqpJU=", "subject"=>"", "body"=>"", "medic_ids"=>"[304, 635, 472, 349, 683, 702, 588, 486, 593, 492, 645, 536, 685, 686, 410, 417, 573, 564, 567, 678, 651, 474, 734, 408, 718]", "commit"=>"Submit"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Medic Load (0.7ms) SELECT "medics".* FROM "medics" WHERE "medics"."id" = $1 LIMIT 1 [["id", 0]]
Completed 404 Not Found in 6.0ms
ActiveRecord::RecordNotFound - Couldn't find Medic with id=0:
私はこれについて進歩を遂げていると感じていますが、正しい軌道に乗っているようですが、私は確信していません私はparamハッシュでそれを見ていないので、それは0のIDを持つ医療機関をロードしています。
提案がありますか?