2017-01-07 12 views
0

私は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_idsdivision列によってメディックスのグループをシャベルできるようにしたいと思います。コンソールから

は私が行うときは、次の

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を持つ医療機関をロードしています。

提案がありますか?

答えて

0

最後に私の更新されたコードを使って、params[:medic_ids] in eval() `をラップして、文字列の内部の配列を評価しました。これは私のform_tagリライトと一緒に、私がそれを必要としていたかのように機能しました。

関連する問題