rails:1456
From: 片平 裕市 <yuichi_katahira@m...>
Date: Thu, 3 Aug 2006 11:55:57 +0900
Subject: [rails:1456] Re: habtm で param を受け取る方法
片平(Yu_kata)です。 > > <!--rails start--> > <select id="service_area_id" name="service[area_ids][]"> > <% for area in @area %> > <option value="<%= area.id %>"><%=h area.name %></option> > <% end %> > </select> > <!--rails end--> 質問の件とは関係ないですが、取り敢えず、複数の値を取りたいなら、 selectにmultiple="multiple"を追加しないと、複数の値は取れ ないのでは ないでしょうか? > 確認画面に移るときのControllerのdef confirmメソッ > ドでは、 > @area_name = Area.find(@params[:service][:area_ids]).name > というようにパラメータで受けて、選択されたIDを使って > Areaのテーブルから名前を受け取り、確認画面に反映させたいのです > が、 > エラーが起こります。 > --------エラー画 > 面---------------------------------------------------- > Couldn't find Area without an ID > C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/ > activerecord-1.14.2/lib/active_record/base.rb:939:in `find_from_ids' > C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/ > activerecord-1.14.2/lib/active_record/base.rb:382:in `find' > #{RAILS_ROOT}/app/controllers/b_account_controller.rb:145:in `confirm' > > Parameters: {"membertype"=>"3", "service"=>#<Service:0x39dd9a8 > @attributes= > {"name_j"=>"", "attachment_id"=>nil, "latitude"=>nil, > "updated_at"=>nil, > "companyname"=>"fsdfds", "expired_at"=>nil, "between_a"=>"", > "deleted_at"=>nil, "between_b"=>"", "website"=>"fsdf", > "tel"=>"sfsdfs", > "companyaddress"=>"555 Irving, San Francisco, CA", > "manager"=>"sdfdsf", > "name_e"=>"fsdfds", "longitude"=>nil, "companytel"=>"sfsdfs", > "chargerpost"=>"sdfsdf", "charger"=>"sdfdsf", > "address"=>"555 Irving, San Francisco, CA", "password"=>"sdfsd", > "created_at"=>nil, "industry_id"=>"1", "membertype_id"=>"3", > "email"=>"sdfsd"}, @areas=[#<Area:0x39dc268 > @attributes={"name"=>"\343\203\217\343\203\274\343\203\254\343\203 > \240", > "latitude"=>"-73.94691467285156", "id"=>"1", > "longitude"=>"40.80822244501176"}>], > @new_record=true>} > ---------------------------------------------------------------------- > 安直に > @area_name = Area.find(@params[:service][:area_id]).name > しても同じエラーが帰ってきました。 > Area.find(params[:service][:area_ids]) した値は AR が配列 で入っているはずです。 例え値を 1 つしか選択していなくてもです。 具体的にはこんな感じで入ってきているはずです。 これ→[ #<Area:xxxxxxxx @attributes={"id" =>"1","name" =>"hogehoge"}, #<Area:xxxxxxxx @attributes={"id" =>"2","name" =>"fugafuga"}> ] ←これ で、name メソッドは Array にはないので、わたなべさん のコードですと 本来なら下記の樣なエラーが返ってくるはずです。 NoMethodError: undefined method `name' しかし、Couldn't find Area without an ID とエラーが返って きています。 controllerのコードやviewの他の部分がわからないのでなんとも 言えませんが、 params[:service][:area_ids]がうまく取れていないのではないかと思 います。 正しく取得出来ている場合、Areaのnameを取得する為に は、上述の樣に Array で渡ってきている筈ですので、Array の要素になっている AR から呼び 出してやらないと、取れません。 例えばこんな感じに。 @area_name=Area.find(params[:service][:area_ids].collect { |area| area.name } -- ML: rails@r... 使い方: http://QuickML.com/
@ 1447 2006-08-02 23:29 [twata_nabe@y... ] habtm で param を受け取る方法 -> 1456 2006-08-03 04:55 ┗[yuichi_katahira@m...] 1457 2006-08-03 05:01 ┗[yuichi_katahira@m...] @ 1458 2006-08-03 15:29 ┗[twata_nabe@y... ] @ 1459 2006-08-03 15:38 ┣[twata_nabe@y... ] 1461 2006-08-04 04:26 ┗[yuichi_katahira@m...]