[前][次][番号順一覧][スレッド一覧]

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...]